{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "gHwodsLKY0Wk"
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "from torch import nn\n",
    "from torchsummary import summary\n",
    "import hc_utils as utils\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm\n",
    "import copy\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "UfPK1I9jZLpg",
    "outputId": "a566c480-a2d7-4026-d80f-841294c42928"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'cpu'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
    "device"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "PWa1j6SaZOf0"
   },
   "outputs": [],
   "source": [
    "data = utils.load_data('./data/heat_cond_data_n32_new.pickle', normalize=True)\n",
    "test_data = utils.load_data('./data/heat_cond_data_n64.pickle', normalize=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "_vqwjPc0aPvj"
   },
   "outputs": [],
   "source": [
    "train_loader, test_loader = utils.get_data_loaders(data, test_size=0.5, batch_size=128, training_noise=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "o4h9rj7Bnzmv",
    "outputId": "7a7a32a5-4354-4f95-fcad-fe61bda81b6b"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1024, 1024)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(train_loader.dataset), len(test_loader.dataset)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MLP approach"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "Em8zbsMgbQr1"
   },
   "outputs": [],
   "source": [
    "class FCN(nn.Module):\n",
    "    def __init__(self, in_features=32*32*2, out_features=4, layers_sizes=[256,256], bn=False, af=nn.ReLU(), transform_output=False):\n",
    "        super().__init__()\n",
    "\n",
    "        self.layers = nn.ModuleList()\n",
    "\n",
    "        for l in layers_sizes:\n",
    "            self.layers.append(nn.Linear(in_features=in_features, out_features=l))\n",
    "            in_features = l\n",
    "            if bn:\n",
    "                self.layers.append(nn.BatchNorm1d(num_features = in_features))\n",
    "\n",
    "            self.layers.append(af)\n",
    "\n",
    "        self.layers.append(nn.Linear(in_features=in_features, out_features=out_features))\n",
    "        \n",
    "        self.transform_output = transform_output\n",
    "\n",
    "    def forward(self, x):\n",
    "        y = torch.flatten(x, start_dim=1)\n",
    "\n",
    "        for layer in self.layers:\n",
    "            y = layer(y)\n",
    "\n",
    "        if self.transform_output:\n",
    "            y = nn.functional.sigmoid(y)\n",
    "\n",
    "        return y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "ZcCqRx6oeRo-",
    "outputId": "c9fe067e-ea53-42bf-be6a-5a59fe3189b9"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------------------------------------------------------------\n",
      "        Layer (type)               Output Shape         Param #\n",
      "================================================================\n",
      "            Linear-1                  [-1, 256]         524,544\n",
      "       BatchNorm1d-2                  [-1, 256]             512\n",
      "              ReLU-3                  [-1, 256]               0\n",
      "            Linear-4                  [-1, 256]          65,792\n",
      "       BatchNorm1d-5                  [-1, 256]             512\n",
      "              ReLU-6                  [-1, 256]               0\n",
      "            Linear-7                    [-1, 4]           1,028\n",
      "================================================================\n",
      "Total params: 592,388\n",
      "Trainable params: 592,388\n",
      "Non-trainable params: 0\n",
      "----------------------------------------------------------------\n",
      "Input size (MB): 0.01\n",
      "Forward/backward pass size (MB): 0.01\n",
      "Params size (MB): 2.26\n",
      "Estimated Total Size (MB): 2.28\n",
      "----------------------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "summary(FCN(bn=True), (2,32,32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "jxsKQvIxebkL"
   },
   "outputs": [],
   "source": [
    "criterion = nn.MSELoss()\n",
    "fcn = FCN(layers_sizes=[128,128,128], bn=False, af=nn.ReLU()).double()\n",
    "sgd = torch.optim.SGD(fcn.parameters(), lr=0.01, momentum=0.9, weight_decay=1e-3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "gxpn7jQHe-s_",
    "outputId": "6942d58a-9e41-44cf-8b7d-0ca4802d49c8"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epochs:  49%|██████████████████████████████████▋                                    | 734/1500 [00:56<00:58, 13.04it/s]\n"
     ]
    }
   ],
   "source": [
    "n_epoch = 1500\n",
    "fcn = FCN(layers_sizes=[128,128], bn=False, af=nn.ReLU()).double()\n",
    "sgd = torch.optim.SGD(fcn.parameters(), lr=0.01, momentum=0.9, weight_decay=1e-3)\n",
    "train_losses, valid_losses, _ = utils.train_model(fcn, train_loader, test_loader, criterion, sgd, device, n_epoch, early_stop=True, patience=30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 458
    },
    "id": "Uy6UaPePfEOE",
    "outputId": "96a1ceb2-aa63-4741-f1de-505af9548c7a"
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcYAAAG5CAYAAAAUFpQ9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAAsTAAALEwEAmpwYAABvJElEQVR4nO3dd3hUxfrA8e+7m14IkEAooffeQUSpoqgoFhDQq2LFXq7l2q4Fe7leG3ptPwsWUBRFRWkiTem9SoAAoYQE0kgv8/tjdw+7SYANZFPfz/Pswylzzs6JyJuZM/OOGGNQSimllIOtoiuglFJKVSYaGJVSSik3GhiVUkopNxoYlVJKKTcaGJVSSik3GhiVUkopNxoYlVIVTkQmiMiSiq6HUqCBUSmviEiciOSKSFSR42tFxIhIc+d+jIh8JyJJIpIqIptEZILzXHNn2WNFPmPL/4mUUifiV9EVUKoK2Q2MB94GEJEuQEiRMlOA9UAzIAfoAjQoUqa2MSbft1X1joj4VZa6KFVZaItRKe9NAa5z278e+LxImT7Ap8aYDGNMvjFmrTHm19P5MhFpJCIzReSoiMSKyC1ux7NEpK5b2R7OVqq/c/9GEdkqIskiMltEmrmVNSJyp4jsAHac4LvPEpE/RSRFRNaLyGC3c3+IyIsiskJE0kTkxyJ1uVRENjuv/UNEOridayIi34tIoogcEZF3inzva8467xaRC92OTxCRXSKS7jx3zen8TJXyhgZGpby3DKglIh1ExA6MA74oocxkERknIk3P8PumAvFAI2A08IKIDDXGHAD+Aq50K3s1MN0Ykycio4DHgCuAesBi4Osi974M6Ad0LPqlItIY+AV4DqgLPAh8JyL13IpdB9wINATygbec17Z1ftd9zu+eBfwkIgHOn9nPwB6gOdDY+Ywu/YDtQBTwCvCxOIQ673+hMSYcOBtYd9KfnFJnwhijH/3o5xQfIA44D3gCeBEYAczF8TrCAM2d5eoALwGbgQIc/4D3cZ5r7iybUuTToYTva+K8Ptzt2Is4WqMANwO/O7cF2AcMdO7/Ctzkdp0NyASaOfcNMPQkz/ovYEqRY7OB653bfwAvuZ3rCOQCduDfwDdFvns/MBjoDyQCfiV85wQg1m0/xFnPBkCo8+d0JRBc0X8X9FP9P9piVKp0puBonU2geDcqxphkY8wjxphOQDSOwPiDiIhbsShjTG23z9YSvqcRcNQYk+52bA+OVhbAd0B/EWkIDAQKcbQMwfF+801nV2YKcBRH8Gzsdq99J3nGZsAY1/XOe5yDo3VY0vV7AH8cLb1Gzn3Xz6PQWbYxjmC/x5z4neYht+synZthxpgMYCxwG3BQRH4RkfYnqb9SZ0QDo1KlYIzZg2MQzkXA96comwS8hiNY1D1Z2RIcAOqKSLjbsaY4Wl8YY5KBOTgCxtXAVGOMa6mcfcDEIsE32Bjzp3v1TvLd+3C0GN2vDzXGvORWpkmReuUBSc56u7/PFGfZ/c77NhWRUg/6M8bMNsYMxxGctwEflvYeSnlLA6NSpXcTjq7IjKInRORlEeksIn7OoHY7ji7CI6X5AmPMPuBP4EURCRKRrs7vdX+n+RWOd32jndsu/wMeFZFOzjpFiMiYUnz9F8AlInKBiNid3z9YRGLcyvxDRDqKSAgwCcf7zQLgG+BiERnmHAj0AI7RuX8CK4CDwEsiEuq874BTVUZEokVklPNdYw5wDEcLWSmf0MCoVCkZY3YaY1ad4HQIMAPHO7FdOFpPlxYpk1JkHuM/T3Cv8TjeSx5w3vMpY8w8t/MzgTbAIWPMerf6zQBeBqaKSBqwCbgQLzmDsmsATyKOlt5DeP57MQX4FEf3ZxBwj/Pa7cA/cExpSQIuAS4xxuQ6A+clQGtgL46BRd7M4bQB/3T+HI4Cg3D8wqGUT8jx3hellDo1EfkD+MIY81FF10UpX9AWo1JKKeVGA6NSSinlRrtSlVJKKTfaYlRKKaXc1Igk4lFRUaZ58+YVXQ2llFKVxOrVq5OMMfVKOlcjAmPz5s1ZtepEo+uVUkrVNCKy50TntCtVKaWUcqOBUSmllHKjgVEppZRyUyPeMSqlVFWRl5dHfHw82dnZFV2VaiEoKIiYmBj8/f29vkYDo1JKVSLx8fGEh4fTvHlzPFcrU6VljOHIkSPEx8fTokULr6/TrlSllKpEsrOziYyM1KBYBkSEyMjIUre+NTAqpVQlo0Gx7JzOz1IDo1JKKeVGA6NSSinLkCFDmD17tsexN954g9tvL3kJzMGDB1sJVC666CJSUlKKlXn66ad57bXXTvq9P/zwA1u2bLH2n3zySebNm3eSK3xHA6NSSinL+PHjmTp1qsexqVOnMn78+FNeO2vWLGrXrn1a31s0ME6aNInzzjvvtO51pjQwKqWUsowePZpffvmF3NxcAOLi4jhw4ABff/01vXv3plOnTjz11FMlXtu8eXOSkpIAeP7552nbti3nnHMO27dvt8p8+OGH9OnTh27dunHllVeSmZnJn3/+ycyZM3nooYfo3r07O3fuZMKECUyfPh2A+fPn06NHD7p06cKNN95ITk6O9X1PPfUUPXv2pEuXLmzbtq1MfgY6XUMppSqpp5b/xOajB8r0np3qNuKZfpec8HzdunXp27cvv/76K6NGjWLq1KlcddVVPPbYY9StW5eCggKGDRvGhg0b6Nq1a4n3WL16NVOnTmXdunXk5+fTs2dPevXqBcAVV1zBLbfcAsATTzzBxx9/zN13382ll17KyJEjGT16tMe9srOzmTBhAvPnz6dt27Zcd911vPfee9x3330AREVFsWbNGt59911ee+01PvroozP+Gfm0xSgiI0Rku4jEisgjJZwPFJFpzvPLRaS583hfEVnn/KwXkcvdrokTkY3Oc5oZXCmlyph7d6qrG/Wbb76hZ8+e9OjRg82bN3t0exa1ePFiLr/8ckJCQqhVqxaXXnqpdW7Tpk2ce+65dOnShS+//JLNmzeftC7bt2+nRYsWtG3bFoDrr7+eRYsWWeevuOIKAHr16kVcXNzpPrIHn7UYRcQOTAaGA/HAShGZaYxx/2neBCQbY1qLyDjgZWAssAnobYzJF5GGwHoR+ckYk++8bogxJslXdVdKqcrgZC07Xxo1ahT3338/a9asITMzk7p16/Laa6+xcuVK6tSpw4QJE047M8+ECRP44Ycf6NatG59++il//PHHGdU1MDAQALvdTn5+/ilKe8eXLca+QKwxZpcxJheYCowqUmYU8JlzezowTETEGJPpFgSDAOPDep5SVlYW+/fvt/rclVKqOgsLC2PIkCHceOONjB8/nrS0NEJDQ4mIiCAhIYFff/31pNcPHDiQH374gaysLNLT0/npp5+sc+np6TRs2JC8vDy+/PJL63h4eDjp6enF7tWuXTvi4uKIjY0FYMqUKQwaNKiMnrRkvgyMjYF9bvvxzmMllnEGwlQgEkBE+onIZmAjcJtboDTAHBFZLSK3nujLReRWEVklIqsSExPP6EH+/vtvJk2axIEDZdvXr5RSldX48eNZv34948ePp1u3bvTo0YP27dtz9dVXM2DAgJNe27NnT8aOHUu3bt248MIL6dOn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asv8+fOLXZebm3vCrtHExEQef/xxK5i7Arb7KN3SWLp0aYlTeErj0KFDzJ4925ovW970HaNSqspp2LAh4Bj0IyInfNcWHR3NxRdfTHZ2NsOGDSMoKIhFixaxfft2fvzxR+B4gGnXrp01zzIjI4Ply5db6e2WLVtGRkYGq1evtu69Zs0aAHbv3s3rr79ObGwsubm5VuvTNU/ziSee8Jin6ZKenk5wcDAFBQWsX7+elJQU+vfvzzvvvMPIkSPp0KHDSX8G27dv56effmLixIkEBwdb3+uaA+pu0qRJJCYm8v777xc752oZb926lZEjR1rHT7er9vPPHSnkSvoub7n+m+zbt++073EmNDAqpaqcoUOHEhYWRr9+xfN+urPZbFx66aXW/uDBg1m0aBFvvPEGwcHBBAUFER8fT1BQkBVswfGe0z3bz9dff21tX3rppezevZuNGzcCjgDy4IMPkpGRQf369QkMDPRIi/fcc8+VmJknPT2d+vXrM2/ePGvqyr59+4iNjWXy5Mmcc845tGnThszMTAYMGFCs69UV2Ldv3063bt2s7mJXYPz222+pX78+vXv3tqbNlDQFxdVydb3jdc0LPd0Wo7tdu3axb9++k67oUhL3NUCzs7MJCtJRqUopdVJ2u53+/fuX+rro6GguvfRSvv/+ey655BKMMfz+++/ceOONHll5rr32Wjp37mwlRgdHooMHH3yQ6OhoACvhARzPlHP48GF69+5N9+7dWbt2rdXCLCnIuFpF7utiurbz8vJYsGABCxYsAByJ3U80Qva9997joYcesoKfiJCfn28lfA8PD7fKZmdnW63UadOm0bBhQ+u5Xe9tXXU9VYvx6NGjzJ07l4suusjjO9y9/PLLgCOnbufOnUssUxL3wLhkyRLsdjuDBw8ut3mlPn3HKCIjRGS7iMSKyCMlnA8UkWnO88tFpLnbuUedx7eLyAVux+NEZKOIrBORVUXvqZRSJzN8+HAeeeQRhg4dyrBhw3jhhResNStdAgIC6NmzJx07drSOXXfddVZQBIqNkHVp2rQpffr04ZprrrGOTZgwweM+4Bjw8vfff3skKHAfPesuJSXlpIkM5syZY21v27bNWisT8JhL+tNPP7F3716++uorFi5cyM8//2yNshURnn76aSs4Z2ZmFssqlJCQwJdffklubi4vvvgiv//+u8f7RPdVUNxb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",
      "text/plain": [
       "<Figure size 504x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "utils.plot_loss(train_losses, valid_losses, start=2, end=None, filename='mlp_relu.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "UiWUyUfFfVrF",
    "outputId": "f12b28ba-fd36-4455-aba7-38327fda56ce"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.006379065960298786"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ev = utils.Evaluator(fcn, dataset=test_loader.dataset.data)\n",
    "ev.calculate_loss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "xnYkW-iKPcN5",
    "outputId": "03be600e-a0ee-4286-b464-17bbedf0c9f7"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.009285282272430013"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_fcn = nn.Sequential(\n",
    "    nn.AvgPool2d(kernel_size=2, stride=2),\n",
    "    fcn\n",
    ")\n",
    "\n",
    "test_ev2 = utils.Evaluator(test_fcn, dataset=test_data)\n",
    "test_ev2.calculate_loss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 462
    },
    "id": "APcP7Pmqfpej",
    "outputId": "8df6b2c6-2b1e-47d9-98c5-f325e5203c6b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "true: [0.453125 0.359375 0.765625 0.09375 ]\n",
      "prediction: [0.3772533  0.39306961 0.78724838 0.10495107]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 864x504 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ev.plot_next()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "oEZNQoPcrVuT"
   },
   "outputs": [],
   "source": [
    "afs = [('Tanh',nn.Tanh()), ('Sigmoid',nn.Sigmoid()), ('ReLU',nn.ReLU()), ('LReLU', nn.LeakyReLU(negative_slope=0.2))]\n",
    "sigmoids = [False, True]\n",
    "bns = [False, True]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "J1X8jsKsyYeZ",
    "outputId": "ed4cbbcc-ba90-4667-833d-7d876e51c2b9"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epochs:  43%|██████████████████████████████▍                                        | 643/1500 [01:11<01:35,  9.01it/s]\n",
      "Epochs:  44%|███████████████████████████████▎                                       | 661/1500 [01:19<01:40,  8.35it/s]\n",
      "Epochs:  35%|█████████████████████████▏                                             | 532/1500 [01:01<01:52,  8.63it/s]\n",
      "Epochs:  36%|█████████████████████████▊                                             | 545/1500 [01:08<02:00,  7.92it/s]\n"
     ]
    }
   ],
   "source": [
    "n_epoch = 1500\n",
    "results = []\n",
    "for sigmoid in sigmoids:\n",
    "    for bn in bns:\n",
    "        for af_name, af in afs:\n",
    "            criterion = nn.MSELoss()\n",
    "            fcn = FCN(layers_sizes=[256,256], bn=bn, af=af, transform_output=sigmoid).double()\n",
    "            sgd = torch.optim.SGD(fcn.parameters(), lr=0.01, momentum=0.9, weight_decay=1e-3)\n",
    "\n",
    "            start_time = time.time()\n",
    "            train_losses, valid_losses, _ = utils.train_model(fcn, train_loader, test_loader, criterion, sgd, device, n_epoch, early_stop=True, patience=20)\n",
    "            end_time = time.time()\n",
    "\n",
    "            results.append((af_name, bn, sigmoid, train_losses, valid_losses, end_time-start_time, sum(p.numel() for p in fcn.parameters())))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 551
    },
    "id": "_c72QqKDuA4g",
    "outputId": "b905e274-48ea-4015-8e0c-d736c855597e"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>af</th>\n",
       "      <th>bn</th>\n",
       "      <th>sigmoid</th>\n",
       "      <th>train_losses</th>\n",
       "      <th>valid_losses</th>\n",
       "      <th>exec_time</th>\n",
       "      <th>n_params</th>\n",
       "      <th>epochs</th>\n",
       "      <th>min_loss</th>\n",
       "      <th>unit_time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.15851572008639506, 0.048931482063728556, 0....</td>\n",
       "      <td>[0.07123767228496797, 0.03381293691839081, 0.0...</td>\n",
       "      <td>73.480021</td>\n",
       "      <td>591364</td>\n",
       "      <td>660</td>\n",
       "      <td>0.010299</td>\n",
       "      <td>0.111333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.1587862174334466, 0.07429598229519815, 0.05...</td>\n",
       "      <td>[0.0738679244407181, 0.05113509226004601, 0.05...</td>\n",
       "      <td>70.489054</td>\n",
       "      <td>591364</td>\n",
       "      <td>594</td>\n",
       "      <td>0.020391</td>\n",
       "      <td>0.118668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.11800287630251394, 0.05004516211511992, 0.0...</td>\n",
       "      <td>[0.07551834453267467, 0.04084133777894967, 0.0...</td>\n",
       "      <td>55.002912</td>\n",
       "      <td>591364</td>\n",
       "      <td>487</td>\n",
       "      <td>0.006373</td>\n",
       "      <td>0.112942</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.14883118901204687, 0.05177680258991368, 0.0...</td>\n",
       "      <td>[0.05535396238100122, 0.033776031151629506, 0....</td>\n",
       "      <td>81.240329</td>\n",
       "      <td>591364</td>\n",
       "      <td>674</td>\n",
       "      <td>0.006695</td>\n",
       "      <td>0.120535</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.17807506421330077, 0.047509034210424454, 0....</td>\n",
       "      <td>[0.09665348233960591, 0.0372019737171282, 0.03...</td>\n",
       "      <td>19.508477</td>\n",
       "      <td>592388</td>\n",
       "      <td>165</td>\n",
       "      <td>0.014742</td>\n",
       "      <td>0.118233</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.25624024827078157, 0.0826698229468406, 0.04...</td>\n",
       "      <td>[0.06617046931415729, 0.04607970092765363, 0.0...</td>\n",
       "      <td>17.007585</td>\n",
       "      <td>592388</td>\n",
       "      <td>138</td>\n",
       "      <td>0.020106</td>\n",
       "      <td>0.123243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.11848902526290948, 0.047271977276959566, 0....</td>\n",
       "      <td>[0.08290635516777987, 0.04091168273397848, 0.0...</td>\n",
       "      <td>22.876817</td>\n",
       "      <td>592388</td>\n",
       "      <td>178</td>\n",
       "      <td>0.011026</td>\n",
       "      <td>0.128521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.10451917346506395, 0.04003997772300682, 0.0...</td>\n",
       "      <td>[0.06620864183649675, 0.03273725414194736, 0.0...</td>\n",
       "      <td>11.504328</td>\n",
       "      <td>592388</td>\n",
       "      <td>84</td>\n",
       "      <td>0.013089</td>\n",
       "      <td>0.136956</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.08896515391224254, 0.07192619334646846, 0.0...</td>\n",
       "      <td>[0.08024298036604825, 0.06575853465449957, 0.0...</td>\n",
       "      <td>171.899068</td>\n",
       "      <td>591364</td>\n",
       "      <td>1500</td>\n",
       "      <td>0.011574</td>\n",
       "      <td>0.114599</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.0704804656777384, 0.04915063460585123, 0.04...</td>\n",
       "      <td>[0.05184866179764293, 0.04940116193227932, 0.0...</td>\n",
       "      <td>99.763792</td>\n",
       "      <td>591364</td>\n",
       "      <td>788</td>\n",
       "      <td>0.029077</td>\n",
       "      <td>0.126604</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.0864867240425252, 0.07022686967966311, 0.05...</td>\n",
       "      <td>[0.07840659549999782, 0.06175358758306809, 0.0...</td>\n",
       "      <td>174.597352</td>\n",
       "      <td>591364</td>\n",
       "      <td>1500</td>\n",
       "      <td>0.007985</td>\n",
       "      <td>0.116398</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.08438688269917548, 0.06820968295286295, 0.0...</td>\n",
       "      <td>[0.07666477126741608, 0.060564401430141426, 0....</td>\n",
       "      <td>184.658080</td>\n",
       "      <td>591364</td>\n",
       "      <td>1500</td>\n",
       "      <td>0.010549</td>\n",
       "      <td>0.123105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.07263829418199201, 0.054073302336222005, 0....</td>\n",
       "      <td>[0.06826287153886912, 0.054925900655885075, 0....</td>\n",
       "      <td>22.136066</td>\n",
       "      <td>592388</td>\n",
       "      <td>185</td>\n",
       "      <td>0.015682</td>\n",
       "      <td>0.119654</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.05918251599751945, 0.03730165453251103, 0.0...</td>\n",
       "      <td>[0.050227197995921825, 0.04252545186408733, 0....</td>\n",
       "      <td>24.996936</td>\n",
       "      <td>592388</td>\n",
       "      <td>194</td>\n",
       "      <td>0.019833</td>\n",
       "      <td>0.128850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.07817454375013766, 0.036671950759649664, 0....</td>\n",
       "      <td>[0.0629876732012775, 0.03513356174479933, 0.02...</td>\n",
       "      <td>19.246790</td>\n",
       "      <td>592388</td>\n",
       "      <td>139</td>\n",
       "      <td>0.010968</td>\n",
       "      <td>0.138466</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.07428661130173707, 0.04027980429591111, 0.0...</td>\n",
       "      <td>[0.06423371434340935, 0.03849840415328214, 0.0...</td>\n",
       "      <td>23.120966</td>\n",
       "      <td>592388</td>\n",
       "      <td>167</td>\n",
       "      <td>0.011442</td>\n",
       "      <td>0.138449</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         af     bn  sigmoid  \\\n",
       "0      Tanh  False    False   \n",
       "1   Sigmoid  False    False   \n",
       "2      ReLU  False    False   \n",
       "3     LReLU  False    False   \n",
       "4      Tanh   True    False   \n",
       "5   Sigmoid   True    False   \n",
       "6      ReLU   True    False   \n",
       "7     LReLU   True    False   \n",
       "8      Tanh  False     True   \n",
       "9   Sigmoid  False     True   \n",
       "10     ReLU  False     True   \n",
       "11    LReLU  False     True   \n",
       "12     Tanh   True     True   \n",
       "13  Sigmoid   True     True   \n",
       "14     ReLU   True     True   \n",
       "15    LReLU   True     True   \n",
       "\n",
       "                                         train_losses  \\\n",
       "0   [0.15851572008639506, 0.048931482063728556, 0....   \n",
       "1   [0.1587862174334466, 0.07429598229519815, 0.05...   \n",
       "2   [0.11800287630251394, 0.05004516211511992, 0.0...   \n",
       "3   [0.14883118901204687, 0.05177680258991368, 0.0...   \n",
       "4   [0.17807506421330077, 0.047509034210424454, 0....   \n",
       "5   [0.25624024827078157, 0.0826698229468406, 0.04...   \n",
       "6   [0.11848902526290948, 0.047271977276959566, 0....   \n",
       "7   [0.10451917346506395, 0.04003997772300682, 0.0...   \n",
       "8   [0.08896515391224254, 0.07192619334646846, 0.0...   \n",
       "9   [0.0704804656777384, 0.04915063460585123, 0.04...   \n",
       "10  [0.0864867240425252, 0.07022686967966311, 0.05...   \n",
       "11  [0.08438688269917548, 0.06820968295286295, 0.0...   \n",
       "12  [0.07263829418199201, 0.054073302336222005, 0....   \n",
       "13  [0.05918251599751945, 0.03730165453251103, 0.0...   \n",
       "14  [0.07817454375013766, 0.036671950759649664, 0....   \n",
       "15  [0.07428661130173707, 0.04027980429591111, 0.0...   \n",
       "\n",
       "                                         valid_losses   exec_time  n_params  \\\n",
       "0   [0.07123767228496797, 0.03381293691839081, 0.0...   73.480021    591364   \n",
       "1   [0.0738679244407181, 0.05113509226004601, 0.05...   70.489054    591364   \n",
       "2   [0.07551834453267467, 0.04084133777894967, 0.0...   55.002912    591364   \n",
       "3   [0.05535396238100122, 0.033776031151629506, 0....   81.240329    591364   \n",
       "4   [0.09665348233960591, 0.0372019737171282, 0.03...   19.508477    592388   \n",
       "5   [0.06617046931415729, 0.04607970092765363, 0.0...   17.007585    592388   \n",
       "6   [0.08290635516777987, 0.04091168273397848, 0.0...   22.876817    592388   \n",
       "7   [0.06620864183649675, 0.03273725414194736, 0.0...   11.504328    592388   \n",
       "8   [0.08024298036604825, 0.06575853465449957, 0.0...  171.899068    591364   \n",
       "9   [0.05184866179764293, 0.04940116193227932, 0.0...   99.763792    591364   \n",
       "10  [0.07840659549999782, 0.06175358758306809, 0.0...  174.597352    591364   \n",
       "11  [0.07666477126741608, 0.060564401430141426, 0....  184.658080    591364   \n",
       "12  [0.06826287153886912, 0.054925900655885075, 0....   22.136066    592388   \n",
       "13  [0.050227197995921825, 0.04252545186408733, 0....   24.996936    592388   \n",
       "14  [0.0629876732012775, 0.03513356174479933, 0.02...   19.246790    592388   \n",
       "15  [0.06423371434340935, 0.03849840415328214, 0.0...   23.120966    592388   \n",
       "\n",
       "    epochs  min_loss  unit_time  \n",
       "0      660  0.010299   0.111333  \n",
       "1      594  0.020391   0.118668  \n",
       "2      487  0.006373   0.112942  \n",
       "3      674  0.006695   0.120535  \n",
       "4      165  0.014742   0.118233  \n",
       "5      138  0.020106   0.123243  \n",
       "6      178  0.011026   0.128521  \n",
       "7       84  0.013089   0.136956  \n",
       "8     1500  0.011574   0.114599  \n",
       "9      788  0.029077   0.126604  \n",
       "10    1500  0.007985   0.116398  \n",
       "11    1500  0.010549   0.123105  \n",
       "12     185  0.015682   0.119654  \n",
       "13     194  0.019833   0.128850  \n",
       "14     139  0.010968   0.138466  \n",
       "15     167  0.011442   0.138449  "
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(results, columns=['af', 'bn', 'sigmoid', 'train_losses', 'valid_losses', 'exec_time', 'n_params'])\n",
    "df['epochs'] = df.valid_losses.apply(lambda x: len(x))\n",
    "df['min_loss'] = df.valid_losses.apply(lambda x: np.min(x))\n",
    "df['unit_time'] = df.exec_time / df.epochs\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 300
    },
    "id": "LQhwuxQlDO3T",
    "outputId": "04b7e092-662f-42de-8fb7-9635b525f1b9"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>af</th>\n",
       "      <th>bn</th>\n",
       "      <th>sigmoid</th>\n",
       "      <th>train_losses</th>\n",
       "      <th>valid_losses</th>\n",
       "      <th>exec_time</th>\n",
       "      <th>n_params</th>\n",
       "      <th>epochs</th>\n",
       "      <th>min_loss</th>\n",
       "      <th>unit_time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.15782220514412715, 0.04831120843995066, 0.0...</td>\n",
       "      <td>[0.0713755130430441, 0.03504684225820443, 0.02...</td>\n",
       "      <td>203.149423</td>\n",
       "      <td>279300</td>\n",
       "      <td>944</td>\n",
       "      <td>0.009200</td>\n",
       "      <td>0.215201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.17786815722167182, 0.08372693487025627, 0.0...</td>\n",
       "      <td>[0.07451590496487667, 0.05816368026133466, 0.0...</td>\n",
       "      <td>293.484200</td>\n",
       "      <td>279300</td>\n",
       "      <td>1268</td>\n",
       "      <td>0.017268</td>\n",
       "      <td>0.231454</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.11545901025141186, 0.04762567327323552, 0.0...</td>\n",
       "      <td>[0.05975095872989491, 0.037239864578336605, 0....</td>\n",
       "      <td>128.038925</td>\n",
       "      <td>279300</td>\n",
       "      <td>563</td>\n",
       "      <td>0.006136</td>\n",
       "      <td>0.227423</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.14130541516205533, 0.04607140922414809, 0.0...</td>\n",
       "      <td>[0.050753829041744705, 0.0344321773003851, 0.0...</td>\n",
       "      <td>123.017013</td>\n",
       "      <td>279300</td>\n",
       "      <td>530</td>\n",
       "      <td>0.007990</td>\n",
       "      <td>0.232108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.16857484789378238, 0.05025698776664844, 0.0...</td>\n",
       "      <td>[0.09151100837301526, 0.034235582437114054, 0....</td>\n",
       "      <td>20.282818</td>\n",
       "      <td>279812</td>\n",
       "      <td>90</td>\n",
       "      <td>0.015721</td>\n",
       "      <td>0.225365</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.11911909528275737, 0.05107189429616612, 0.0...</td>\n",
       "      <td>[0.04742950404109804, 0.050935899018259935, 0....</td>\n",
       "      <td>26.889812</td>\n",
       "      <td>279812</td>\n",
       "      <td>111</td>\n",
       "      <td>0.020527</td>\n",
       "      <td>0.242251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.1553593709327214, 0.04159778992507563, 0.02...</td>\n",
       "      <td>[0.05153125875618129, 0.04767508184889863, 0.0...</td>\n",
       "      <td>34.498730</td>\n",
       "      <td>279812</td>\n",
       "      <td>145</td>\n",
       "      <td>0.011746</td>\n",
       "      <td>0.237922</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.12792163661984332, 0.04200335551813602, 0.0...</td>\n",
       "      <td>[0.053266620084412596, 0.038293829035181595, 0...</td>\n",
       "      <td>36.379822</td>\n",
       "      <td>279812</td>\n",
       "      <td>151</td>\n",
       "      <td>0.012640</td>\n",
       "      <td>0.240926</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        af     bn  sigmoid                                       train_losses  \\\n",
       "0     Tanh  False    False  [0.15782220514412715, 0.04831120843995066, 0.0...   \n",
       "1  Sigmoid  False    False  [0.17786815722167182, 0.08372693487025627, 0.0...   \n",
       "2     ReLU  False    False  [0.11545901025141186, 0.04762567327323552, 0.0...   \n",
       "3    LReLU  False    False  [0.14130541516205533, 0.04607140922414809, 0.0...   \n",
       "4     Tanh   True    False  [0.16857484789378238, 0.05025698776664844, 0.0...   \n",
       "5  Sigmoid   True    False  [0.11911909528275737, 0.05107189429616612, 0.0...   \n",
       "6     ReLU   True    False  [0.1553593709327214, 0.04159778992507563, 0.02...   \n",
       "7    LReLU   True    False  [0.12792163661984332, 0.04200335551813602, 0.0...   \n",
       "\n",
       "                                        valid_losses   exec_time  n_params  \\\n",
       "0  [0.0713755130430441, 0.03504684225820443, 0.02...  203.149423    279300   \n",
       "1  [0.07451590496487667, 0.05816368026133466, 0.0...  293.484200    279300   \n",
       "2  [0.05975095872989491, 0.037239864578336605, 0....  128.038925    279300   \n",
       "3  [0.050753829041744705, 0.0344321773003851, 0.0...  123.017013    279300   \n",
       "4  [0.09151100837301526, 0.034235582437114054, 0....   20.282818    279812   \n",
       "5  [0.04742950404109804, 0.050935899018259935, 0....   26.889812    279812   \n",
       "6  [0.05153125875618129, 0.04767508184889863, 0.0...   34.498730    279812   \n",
       "7  [0.053266620084412596, 0.038293829035181595, 0...   36.379822    279812   \n",
       "\n",
       "   epochs  min_loss  unit_time  \n",
       "0     944  0.009200   0.215201  \n",
       "1    1268  0.017268   0.231454  \n",
       "2     563  0.006136   0.227423  \n",
       "3     530  0.007990   0.232108  \n",
       "4      90  0.015721   0.225365  \n",
       "5     111  0.020527   0.242251  \n",
       "6     145  0.011746   0.237922  \n",
       "7     151  0.012640   0.240926  "
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(results2, columns=['af', 'bn', 'sigmoid', 'train_losses', 'valid_losses', 'exec_time', 'n_params'])\n",
    "df['epochs'] = df.valid_losses.apply(lambda x: len(x))\n",
    "df['min_loss'] = df.valid_losses.apply(lambda x: np.min(x))\n",
    "df['unit_time'] = df.exec_time / df.epochs\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "hcPilo92DW3h",
    "outputId": "b3d31694-fd19-4be4-b892-43a16a138af8"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epochs:  48%|██████████████████████████████████                                     | 719/1500 [00:54<00:59, 13.10it/s]\n",
      "Epochs:  24%|████████████████▊                                                      | 354/1500 [00:29<01:35, 11.97it/s]\n",
      "Epochs:  45%|████████████████████████████████                                       | 678/1500 [00:54<01:05, 12.53it/s]\n",
      "Epochs:  45%|████████████████████████████████▏                                      | 681/1500 [00:58<01:10, 11.66it/s]\n"
     ]
    }
   ],
   "source": [
    "n_epoch = 1500\n",
    "results3 = []\n",
    "for sigmoid in sigmoids:\n",
    "    if not sigmoid:\n",
    "        for bn in bns:\n",
    "            for af_name, af in afs:\n",
    "                criterion = nn.MSELoss()\n",
    "                fcn = FCN(layers_sizes=[128,128,128], bn=bn, af=af, transform_output=sigmoid).double()\n",
    "                sgd = torch.optim.SGD(fcn.parameters(), lr=0.01, momentum=0.9, weight_decay=1e-3)\n",
    "\n",
    "                start_time = time.time()\n",
    "                train_losses, valid_losses = train_model(fcn, train_loader, test_loader, criterion, sgd, device, n_epoch, early_stop=True, patience=20)\n",
    "                end_time = time.time()\n",
    "\n",
    "                results3.append((af_name, bn, sigmoid, train_losses, valid_losses, end_time-start_time, sum(p.numel() for p in fcn.parameters())))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 175
    },
    "id": "DfGE92GqG1af",
    "outputId": "9bf43c3d-3a6b-42b5-c9f4-155cffda1a3b"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>af</th>\n",
       "      <th>bn</th>\n",
       "      <th>sigmoid</th>\n",
       "      <th>train_losses</th>\n",
       "      <th>valid_losses</th>\n",
       "      <th>exec_time</th>\n",
       "      <th>n_params</th>\n",
       "      <th>epochs</th>\n",
       "      <th>min_loss</th>\n",
       "      <th>unit_time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.16652990627677827, 0.04408003780066012, 0.0...</td>\n",
       "      <td>[0.07064231554977499, 0.03568414121325873, 0.0...</td>\n",
       "      <td>54.905574</td>\n",
       "      <td>295812</td>\n",
       "      <td>720</td>\n",
       "      <td>0.010135</td>\n",
       "      <td>0.076258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.10013880160560897, 0.0633159528754904, 0.05...</td>\n",
       "      <td>[0.05944671554915052, 0.0528486692426096, 0.05...</td>\n",
       "      <td>29.586356</td>\n",
       "      <td>295812</td>\n",
       "      <td>355</td>\n",
       "      <td>0.029739</td>\n",
       "      <td>0.083342</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.22312303779717815, 0.062388842589101275, 0....</td>\n",
       "      <td>[0.1015767391313167, 0.05134142973924629, 0.03...</td>\n",
       "      <td>54.131233</td>\n",
       "      <td>295812</td>\n",
       "      <td>679</td>\n",
       "      <td>0.005982</td>\n",
       "      <td>0.079722</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.20083694810350064, 0.05579306024746086, 0.0...</td>\n",
       "      <td>[0.08191779320315065, 0.052588942990717126, 0....</td>\n",
       "      <td>58.415635</td>\n",
       "      <td>295812</td>\n",
       "      <td>682</td>\n",
       "      <td>0.007475</td>\n",
       "      <td>0.085653</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        af     bn  sigmoid                                       train_losses  \\\n",
       "0     Tanh  False    False  [0.16652990627677827, 0.04408003780066012, 0.0...   \n",
       "1  Sigmoid  False    False  [0.10013880160560897, 0.0633159528754904, 0.05...   \n",
       "2     ReLU  False    False  [0.22312303779717815, 0.062388842589101275, 0....   \n",
       "3    LReLU  False    False  [0.20083694810350064, 0.05579306024746086, 0.0...   \n",
       "\n",
       "                                        valid_losses  exec_time  n_params  \\\n",
       "0  [0.07064231554977499, 0.03568414121325873, 0.0...  54.905574    295812   \n",
       "1  [0.05944671554915052, 0.0528486692426096, 0.05...  29.586356    295812   \n",
       "2  [0.1015767391313167, 0.05134142973924629, 0.03...  54.131233    295812   \n",
       "3  [0.08191779320315065, 0.052588942990717126, 0....  58.415635    295812   \n",
       "\n",
       "   epochs  min_loss  unit_time  \n",
       "0     720  0.010135   0.076258  \n",
       "1     355  0.029739   0.083342  \n",
       "2     679  0.005982   0.079722  \n",
       "3     682  0.007475   0.085653  "
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(results3, columns=['af', 'bn', 'sigmoid', 'train_losses', 'valid_losses', 'exec_time', 'n_params'])\n",
    "df['epochs'] = df.valid_losses.apply(lambda x: len(x))\n",
    "df['min_loss'] = df.valid_losses.apply(lambda x: np.min(x))\n",
    "df['unit_time'] = df.exec_time / df.epochs\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "7BHUYv1jub50"
   },
   "outputs": [],
   "source": [
    "df1 = pd.DataFrame(results, columns=['af', 'bn', 'sigmoid', 'train_losses', 'valid_losses', 'exec_time', 'n_params'])\n",
    "df2 = pd.DataFrame(results2, columns=['af', 'bn', 'sigmoid', 'train_losses', 'valid_losses', 'exec_time', 'n_params'])\n",
    "df3 = pd.DataFrame(results3, columns=['af', 'bn', 'sigmoid', 'train_losses', 'valid_losses', 'exec_time', 'n_params'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "3DgCCDWXPjgf"
   },
   "outputs": [],
   "source": [
    "df1['depth'] = 2\n",
    "df1['width'] = 256\n",
    "df2['depth'] = 2\n",
    "df2['width'] = 128\n",
    "df3['depth'] = 3\n",
    "df3['width'] = 128"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 426
    },
    "id": "f_u2BNHxPyjB",
    "outputId": "37a28fb5-f56f-4885-a234-15a98c73bf6a"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>af</th>\n",
       "      <th>bn</th>\n",
       "      <th>sigmoid</th>\n",
       "      <th>train_losses</th>\n",
       "      <th>valid_losses</th>\n",
       "      <th>exec_time</th>\n",
       "      <th>n_params</th>\n",
       "      <th>depth</th>\n",
       "      <th>width</th>\n",
       "      <th>epochs</th>\n",
       "      <th>min_loss</th>\n",
       "      <th>unit_time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.17981939752977746, 0.05032275425044493, 0.0...</td>\n",
       "      <td>[0.07702602834983255, 0.03318720384138642, 0.0...</td>\n",
       "      <td>71.365721</td>\n",
       "      <td>591364</td>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>644</td>\n",
       "      <td>0.010423</td>\n",
       "      <td>0.110816</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.15229266200311883, 0.07158465998064972, 0.0...</td>\n",
       "      <td>[0.057044222940540915, 0.05686037766881276, 0....</td>\n",
       "      <td>79.204376</td>\n",
       "      <td>591364</td>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>662</td>\n",
       "      <td>0.019945</td>\n",
       "      <td>0.119644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.12918778453359292, 0.046405317637554656, 0....</td>\n",
       "      <td>[0.06297024770319716, 0.03665541951487268, 0.0...</td>\n",
       "      <td>61.684082</td>\n",
       "      <td>591364</td>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>533</td>\n",
       "      <td>0.006061</td>\n",
       "      <td>0.115730</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.14672472535731862, 0.04640654663119611, 0.0...</td>\n",
       "      <td>[0.05043349326103116, 0.0355459644035629, 0.02...</td>\n",
       "      <td>68.830203</td>\n",
       "      <td>591364</td>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>546</td>\n",
       "      <td>0.007235</td>\n",
       "      <td>0.126063</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.1918139657966401, 0.05723771321300084, 0.03...</td>\n",
       "      <td>[0.0908567634805552, 0.035855735470885455, 0.0...</td>\n",
       "      <td>51.622066</td>\n",
       "      <td>279300</td>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>732</td>\n",
       "      <td>0.010108</td>\n",
       "      <td>0.070522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.124715257277019, 0.07047105935404292, 0.049...</td>\n",
       "      <td>[0.05847028841152598, 0.06037694086539332, 0.0...</td>\n",
       "      <td>81.657403</td>\n",
       "      <td>279300</td>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>1056</td>\n",
       "      <td>0.017916</td>\n",
       "      <td>0.077327</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.14020447756193952, 0.049289601588489086, 0....</td>\n",
       "      <td>[0.0541498415848715, 0.03704290909893427, 0.03...</td>\n",
       "      <td>36.642948</td>\n",
       "      <td>279300</td>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>481</td>\n",
       "      <td>0.006448</td>\n",
       "      <td>0.076181</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.13528984372714595, 0.04636822291792311, 0.0...</td>\n",
       "      <td>[0.050730052071811305, 0.03372244553128514, 0....</td>\n",
       "      <td>41.031830</td>\n",
       "      <td>279300</td>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>538</td>\n",
       "      <td>0.007838</td>\n",
       "      <td>0.076267</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.16652990627677827, 0.04408003780066012, 0.0...</td>\n",
       "      <td>[0.07064231554977499, 0.03568414121325873, 0.0...</td>\n",
       "      <td>54.905574</td>\n",
       "      <td>295812</td>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>720</td>\n",
       "      <td>0.010135</td>\n",
       "      <td>0.076258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.10013880160560897, 0.0633159528754904, 0.05...</td>\n",
       "      <td>[0.05944671554915052, 0.0528486692426096, 0.05...</td>\n",
       "      <td>29.586356</td>\n",
       "      <td>295812</td>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>355</td>\n",
       "      <td>0.029739</td>\n",
       "      <td>0.083342</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.22312303779717815, 0.062388842589101275, 0....</td>\n",
       "      <td>[0.1015767391313167, 0.05134142973924629, 0.03...</td>\n",
       "      <td>54.131233</td>\n",
       "      <td>295812</td>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>679</td>\n",
       "      <td>0.005982</td>\n",
       "      <td>0.079722</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.20083694810350064, 0.05579306024746086, 0.0...</td>\n",
       "      <td>[0.08191779320315065, 0.052588942990717126, 0....</td>\n",
       "      <td>58.415635</td>\n",
       "      <td>295812</td>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>682</td>\n",
       "      <td>0.007475</td>\n",
       "      <td>0.085653</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        af     bn  sigmoid                                       train_losses  \\\n",
       "0     Tanh  False    False  [0.17981939752977746, 0.05032275425044493, 0.0...   \n",
       "1  Sigmoid  False    False  [0.15229266200311883, 0.07158465998064972, 0.0...   \n",
       "2     ReLU  False    False  [0.12918778453359292, 0.046405317637554656, 0....   \n",
       "3    LReLU  False    False  [0.14672472535731862, 0.04640654663119611, 0.0...   \n",
       "0     Tanh  False    False  [0.1918139657966401, 0.05723771321300084, 0.03...   \n",
       "1  Sigmoid  False    False  [0.124715257277019, 0.07047105935404292, 0.049...   \n",
       "2     ReLU  False    False  [0.14020447756193952, 0.049289601588489086, 0....   \n",
       "3    LReLU  False    False  [0.13528984372714595, 0.04636822291792311, 0.0...   \n",
       "0     Tanh  False    False  [0.16652990627677827, 0.04408003780066012, 0.0...   \n",
       "1  Sigmoid  False    False  [0.10013880160560897, 0.0633159528754904, 0.05...   \n",
       "2     ReLU  False    False  [0.22312303779717815, 0.062388842589101275, 0....   \n",
       "3    LReLU  False    False  [0.20083694810350064, 0.05579306024746086, 0.0...   \n",
       "\n",
       "                                        valid_losses  exec_time  n_params  \\\n",
       "0  [0.07702602834983255, 0.03318720384138642, 0.0...  71.365721    591364   \n",
       "1  [0.057044222940540915, 0.05686037766881276, 0....  79.204376    591364   \n",
       "2  [0.06297024770319716, 0.03665541951487268, 0.0...  61.684082    591364   \n",
       "3  [0.05043349326103116, 0.0355459644035629, 0.02...  68.830203    591364   \n",
       "0  [0.0908567634805552, 0.035855735470885455, 0.0...  51.622066    279300   \n",
       "1  [0.05847028841152598, 0.06037694086539332, 0.0...  81.657403    279300   \n",
       "2  [0.0541498415848715, 0.03704290909893427, 0.03...  36.642948    279300   \n",
       "3  [0.050730052071811305, 0.03372244553128514, 0....  41.031830    279300   \n",
       "0  [0.07064231554977499, 0.03568414121325873, 0.0...  54.905574    295812   \n",
       "1  [0.05944671554915052, 0.0528486692426096, 0.05...  29.586356    295812   \n",
       "2  [0.1015767391313167, 0.05134142973924629, 0.03...  54.131233    295812   \n",
       "3  [0.08191779320315065, 0.052588942990717126, 0....  58.415635    295812   \n",
       "\n",
       "   depth  width  epochs  min_loss  unit_time  \n",
       "0      2    256     644  0.010423   0.110816  \n",
       "1      2    256     662  0.019945   0.119644  \n",
       "2      2    256     533  0.006061   0.115730  \n",
       "3      2    256     546  0.007235   0.126063  \n",
       "0      2    128     732  0.010108   0.070522  \n",
       "1      2    128    1056  0.017916   0.077327  \n",
       "2      2    128     481  0.006448   0.076181  \n",
       "3      2    128     538  0.007838   0.076267  \n",
       "0      3    128     720  0.010135   0.076258  \n",
       "1      3    128     355  0.029739   0.083342  \n",
       "2      3    128     679  0.005982   0.079722  \n",
       "3      3    128     682  0.007475   0.085653  "
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.concat([df1, df2, df3])\n",
    "df = df[(df['sigmoid'] == False)&(df['bn'] == False)]\n",
    "df['epochs'] = df.valid_losses.apply(lambda x: len(x))\n",
    "df['min_loss'] = df.valid_losses.apply(lambda x: np.min(x))\n",
    "df['unit_time'] = df.exec_time / df.epochs\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 426
    },
    "id": "bOrxI-qwQGW0",
    "outputId": "c5ce5100-a80c-4dab-a027-5e1a620afcf4"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>depth</th>\n",
       "      <th>width</th>\n",
       "      <th>af</th>\n",
       "      <th>n_params</th>\n",
       "      <th>epochs</th>\n",
       "      <th>unit_time</th>\n",
       "      <th>min_loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>ReLU</td>\n",
       "      <td>295812</td>\n",
       "      <td>679</td>\n",
       "      <td>0.079722</td>\n",
       "      <td>0.005982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>ReLU</td>\n",
       "      <td>591364</td>\n",
       "      <td>533</td>\n",
       "      <td>0.115730</td>\n",
       "      <td>0.006061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>ReLU</td>\n",
       "      <td>279300</td>\n",
       "      <td>481</td>\n",
       "      <td>0.076181</td>\n",
       "      <td>0.006448</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>LReLU</td>\n",
       "      <td>591364</td>\n",
       "      <td>546</td>\n",
       "      <td>0.126063</td>\n",
       "      <td>0.007235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>LReLU</td>\n",
       "      <td>295812</td>\n",
       "      <td>682</td>\n",
       "      <td>0.085653</td>\n",
       "      <td>0.007475</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>LReLU</td>\n",
       "      <td>279300</td>\n",
       "      <td>538</td>\n",
       "      <td>0.076267</td>\n",
       "      <td>0.007838</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>Tanh</td>\n",
       "      <td>279300</td>\n",
       "      <td>732</td>\n",
       "      <td>0.070522</td>\n",
       "      <td>0.010108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>Tanh</td>\n",
       "      <td>295812</td>\n",
       "      <td>720</td>\n",
       "      <td>0.076258</td>\n",
       "      <td>0.010135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>Tanh</td>\n",
       "      <td>591364</td>\n",
       "      <td>644</td>\n",
       "      <td>0.110816</td>\n",
       "      <td>0.010423</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>279300</td>\n",
       "      <td>1056</td>\n",
       "      <td>0.077327</td>\n",
       "      <td>0.017916</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>591364</td>\n",
       "      <td>662</td>\n",
       "      <td>0.119644</td>\n",
       "      <td>0.019945</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>295812</td>\n",
       "      <td>355</td>\n",
       "      <td>0.083342</td>\n",
       "      <td>0.029739</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   depth  width       af  n_params  epochs  unit_time  min_loss\n",
       "2      3    128     ReLU    295812     679   0.079722  0.005982\n",
       "2      2    256     ReLU    591364     533   0.115730  0.006061\n",
       "2      2    128     ReLU    279300     481   0.076181  0.006448\n",
       "3      2    256    LReLU    591364     546   0.126063  0.007235\n",
       "3      3    128    LReLU    295812     682   0.085653  0.007475\n",
       "3      2    128    LReLU    279300     538   0.076267  0.007838\n",
       "0      2    128     Tanh    279300     732   0.070522  0.010108\n",
       "0      3    128     Tanh    295812     720   0.076258  0.010135\n",
       "0      2    256     Tanh    591364     644   0.110816  0.010423\n",
       "1      2    128  Sigmoid    279300    1056   0.077327  0.017916\n",
       "1      2    256  Sigmoid    591364     662   0.119644  0.019945\n",
       "1      3    128  Sigmoid    295812     355   0.083342  0.029739"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.sort_values(by='min_loss')\n",
    "df_p = df[['depth', 'width', 'af', 'n_params', 'epochs', 'unit_time', 'min_loss']]\n",
    "df_p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 458
    },
    "id": "0RwTNJtwbe5W",
    "outputId": "fc2e2785-c1fb-402a-f430-f745af2ba02b"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "start = 2\n",
    "valid_losses1 = df.iloc[0]['valid_losses']\n",
    "valid_losses2 = df.iloc[3]['valid_losses']\n",
    "valid_losses3 = df.iloc[6]['valid_losses']\n",
    "valid_losses4 = df.iloc[9]['valid_losses']\n",
    "    \n",
    "_, ax = plt.subplots(1,1,figsize=(10,7))\n",
    "\n",
    "x1 = np.arange(len(valid_losses1[start:]))+1\n",
    "x2 = np.arange(len(valid_losses2[start:]))+1\n",
    "x3 = np.arange(len(valid_losses3[start:]))+1\n",
    "x4 = np.arange(len(valid_losses4[start:]))+1\n",
    "\n",
    "ax.set_title('Validation loss over epochs')\n",
    "ax.set_xlabel('Epoch')\n",
    "ax.set_ylabel('MSE')\n",
    "\n",
    "colors = plt.cm.BrBG(np.linspace(0, 1, 4))\n",
    "\n",
    "ax.plot(x1, valid_losses1[start:], label='ReLU', color=colors[0])\n",
    "ax.plot(x2, valid_losses2[start:], label='LReLU', color=colors[1])\n",
    "ax.plot(x3, valid_losses3[start:], label='Tanh', color=colors[2])\n",
    "ax.plot(x4, valid_losses4[start:], label='Sigmoid', color=colors[3])\n",
    "\n",
    "\n",
    "ax.legend()\n",
    "plt.savefig('mlp_mse')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 634
    },
    "id": "C_AnUxFrRFrf",
    "outputId": "6031bbf5-433c-4c74-e56d-d6976d9ef4fc"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-99-69a60bf9fb38>:1: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  df_p['unit_time'] = np.round(df_p['unit_time'], 3)\n",
      "<ipython-input-99-69a60bf9fb38>:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  df_p['min_loss'] = np.round(df_p['min_loss'], 4)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>depth</th>\n",
       "      <th>width</th>\n",
       "      <th>af</th>\n",
       "      <th>n_params</th>\n",
       "      <th>epochs</th>\n",
       "      <th>unit_time</th>\n",
       "      <th>min_loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>ReLU</td>\n",
       "      <td>295812</td>\n",
       "      <td>679</td>\n",
       "      <td>0.080</td>\n",
       "      <td>0.0060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>ReLU</td>\n",
       "      <td>591364</td>\n",
       "      <td>533</td>\n",
       "      <td>0.116</td>\n",
       "      <td>0.0061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>ReLU</td>\n",
       "      <td>279300</td>\n",
       "      <td>481</td>\n",
       "      <td>0.076</td>\n",
       "      <td>0.0064</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>LReLU</td>\n",
       "      <td>591364</td>\n",
       "      <td>546</td>\n",
       "      <td>0.126</td>\n",
       "      <td>0.0072</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>LReLU</td>\n",
       "      <td>295812</td>\n",
       "      <td>682</td>\n",
       "      <td>0.086</td>\n",
       "      <td>0.0075</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>LReLU</td>\n",
       "      <td>279300</td>\n",
       "      <td>538</td>\n",
       "      <td>0.076</td>\n",
       "      <td>0.0078</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>Tanh</td>\n",
       "      <td>279300</td>\n",
       "      <td>732</td>\n",
       "      <td>0.071</td>\n",
       "      <td>0.0101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>Tanh</td>\n",
       "      <td>295812</td>\n",
       "      <td>720</td>\n",
       "      <td>0.076</td>\n",
       "      <td>0.0101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>Tanh</td>\n",
       "      <td>591364</td>\n",
       "      <td>644</td>\n",
       "      <td>0.111</td>\n",
       "      <td>0.0104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>279300</td>\n",
       "      <td>1056</td>\n",
       "      <td>0.077</td>\n",
       "      <td>0.0179</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>256</td>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>591364</td>\n",
       "      <td>662</td>\n",
       "      <td>0.120</td>\n",
       "      <td>0.0199</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3</td>\n",
       "      <td>128</td>\n",
       "      <td>Sigmoid</td>\n",
       "      <td>295812</td>\n",
       "      <td>355</td>\n",
       "      <td>0.083</td>\n",
       "      <td>0.0297</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   depth  width       af  n_params  epochs  unit_time  min_loss\n",
       "2      3    128     ReLU    295812     679      0.080    0.0060\n",
       "2      2    256     ReLU    591364     533      0.116    0.0061\n",
       "2      2    128     ReLU    279300     481      0.076    0.0064\n",
       "3      2    256    LReLU    591364     546      0.126    0.0072\n",
       "3      3    128    LReLU    295812     682      0.086    0.0075\n",
       "3      2    128    LReLU    279300     538      0.076    0.0078\n",
       "0      2    128     Tanh    279300     732      0.071    0.0101\n",
       "0      3    128     Tanh    295812     720      0.076    0.0101\n",
       "0      2    256     Tanh    591364     644      0.111    0.0104\n",
       "1      2    128  Sigmoid    279300    1056      0.077    0.0179\n",
       "1      2    256  Sigmoid    591364     662      0.120    0.0199\n",
       "1      3    128  Sigmoid    295812     355      0.083    0.0297"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_p['unit_time'] = np.round(df_p['unit_time'], 3)\n",
    "df_p['min_loss'] = np.round(df_p['min_loss'], 4)\n",
    "df_p"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Convolutional approach"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "6vvlJVMff-L6"
   },
   "outputs": [],
   "source": [
    "class ConvNet(nn.Module):\n",
    "    def __init__(self, in_channels=2, out_features=4, bn=False, af=nn.ReLU(), transform_output=False):\n",
    "        super().__init__()\n",
    "\n",
    "        self.conv = nn.Sequential(\n",
    "            nn.Conv2d(in_channels=in_channels, out_channels=4, kernel_size=3, padding='same', padding_mode='reflect'),\n",
    "            nn.BatchNorm2d(num_features=4),\n",
    "            af,\n",
    "            nn.Conv2d(in_channels=4, out_channels=8, kernel_size=3, padding='same', padding_mode='reflect'),\n",
    "            nn.BatchNorm2d(num_features=8),\n",
    "            af,\n",
    "            nn.MaxPool2d(kernel_size=2, stride=2),\n",
    "            nn.Conv2d(in_channels=8, out_channels=16, kernel_size=3, padding='same', padding_mode='reflect'),\n",
    "            nn.BatchNorm2d(num_features=16),\n",
    "            af,\n",
    "            nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, padding='same', padding_mode='reflect'),\n",
    "            nn.BatchNorm2d(num_features=32),\n",
    "            af,\n",
    "            nn.MaxPool2d(kernel_size=2, stride=2),\n",
    "            nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, padding='same', padding_mode='reflect'),\n",
    "            nn.BatchNorm2d(num_features=64),\n",
    "            af,\n",
    "            nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding='same', padding_mode='reflect'),\n",
    "            nn.BatchNorm2d(num_features=128),\n",
    "            af,\n",
    "            nn.MaxPool2d(kernel_size=2, stride=2),\n",
    "            nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, padding='same', padding_mode='reflect'),\n",
    "            nn.BatchNorm2d(num_features=256),\n",
    "            af,\n",
    "        )\n",
    "        \n",
    "        self.avgpool = nn.AdaptiveAvgPool2d(output_size=1)\n",
    "        \n",
    "        self.fc = nn.Linear(in_features=256, out_features=out_features)\n",
    "\n",
    "        self.transform_output = transform_output\n",
    "        \n",
    "    def forward(self, x):\n",
    "        y = self.conv(x)\n",
    "        y = self.avgpool(y)\n",
    "        y = torch.flatten(y, start_dim=1)\n",
    "        y = self.fc(y)\n",
    "\n",
    "        if self.transform_output:\n",
    "            y = nn.functional.sigmoid(y)\n",
    "\n",
    "        return y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "ybafcHMDiWdW",
    "outputId": "ab297308-2a7a-4299-b1df-6f77e2035b24"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------------------------------------------------------------\n",
      "        Layer (type)               Output Shape         Param #\n",
      "================================================================\n",
      "            Conv2d-1            [-1, 4, 32, 32]              76\n",
      "       BatchNorm2d-2            [-1, 4, 32, 32]               8\n",
      "              ReLU-3            [-1, 4, 32, 32]               0\n",
      "            Conv2d-4            [-1, 8, 32, 32]             296\n",
      "       BatchNorm2d-5            [-1, 8, 32, 32]              16\n",
      "              ReLU-6            [-1, 8, 32, 32]               0\n",
      "         MaxPool2d-7            [-1, 8, 16, 16]               0\n",
      "            Conv2d-8           [-1, 16, 16, 16]           1,168\n",
      "       BatchNorm2d-9           [-1, 16, 16, 16]              32\n",
      "             ReLU-10           [-1, 16, 16, 16]               0\n",
      "           Conv2d-11           [-1, 32, 16, 16]           4,640\n",
      "      BatchNorm2d-12           [-1, 32, 16, 16]              64\n",
      "             ReLU-13           [-1, 32, 16, 16]               0\n",
      "        MaxPool2d-14             [-1, 32, 8, 8]               0\n",
      "           Conv2d-15             [-1, 64, 8, 8]          18,496\n",
      "      BatchNorm2d-16             [-1, 64, 8, 8]             128\n",
      "             ReLU-17             [-1, 64, 8, 8]               0\n",
      "           Conv2d-18            [-1, 128, 8, 8]          73,856\n",
      "      BatchNorm2d-19            [-1, 128, 8, 8]             256\n",
      "             ReLU-20            [-1, 128, 8, 8]               0\n",
      "        MaxPool2d-21            [-1, 128, 4, 4]               0\n",
      "           Conv2d-22            [-1, 256, 4, 4]         295,168\n",
      "      BatchNorm2d-23            [-1, 256, 4, 4]             512\n",
      "             ReLU-24            [-1, 256, 4, 4]               0\n",
      "AdaptiveAvgPool2d-25            [-1, 256, 1, 1]               0\n",
      "           Linear-26                    [-1, 4]           1,028\n",
      "================================================================\n",
      "Total params: 395,744\n",
      "Trainable params: 395,744\n",
      "Non-trainable params: 0\n",
      "----------------------------------------------------------------\n",
      "Input size (MB): 0.01\n",
      "Forward/backward pass size (MB): 0.99\n",
      "Params size (MB): 1.51\n",
      "Estimated Total Size (MB): 2.50\n",
      "----------------------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "summary(ConvNet(), (2,32,32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "nSKYljfhU1Rv"
   },
   "outputs": [],
   "source": [
    "afs = [('ReLU',nn.ReLU()), ('LReLU', nn.LeakyReLU(negative_slope=0.2)), ('Tanh',nn.Tanh())]\n",
    "sigmoids = [True, False]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "AyFQ6SorkCxK",
    "outputId": "33a0475f-e525-45be-c17a-a3c80b8d5334"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epochs:  22%|███████████████▍                                                       | 326/1500 [14:06<50:46,  2.60s/it]\n"
     ]
    }
   ],
   "source": [
    "n_epoch = 1500\n",
    "cresultstest = []\n",
    "for sigmoid in sigmoids:\n",
    "    for af_name, af in afs:\n",
    "        criterion = nn.MSELoss()\n",
    "        convnet = ConvNet(bn=True, af=af, transform_output=sigmoid).double()\n",
    "        sgd = torch.optim.SGD(convnet.parameters(), lr=0.01, momentum=0.9, weight_decay=1e-3)\n",
    "\n",
    "        start_time = time.time()\n",
    "        train_losses, valid_losses, model = utils.train_model(convnet, train_loader, test_loader, criterion, sgd, device, n_epoch, early_stop=True, patience=30)\n",
    "        end_time = time.time()\n",
    "\n",
    "        cresultstest.append((af_name, True, sigmoid, train_losses, valid_losses, end_time-start_time, sum(p.numel() for p in convnet.parameters())))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 81
    },
    "id": "PLdIg1jN5F-Y",
    "outputId": "2980c401-1019-4423-b3f9-9900efe775bf"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>af</th>\n",
       "      <th>bn</th>\n",
       "      <th>sigmoid</th>\n",
       "      <th>train_losses</th>\n",
       "      <th>valid_losses</th>\n",
       "      <th>exec_time</th>\n",
       "      <th>n_params</th>\n",
       "      <th>epochs</th>\n",
       "      <th>min_loss</th>\n",
       "      <th>unit_time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.08286427588365733, 0.05401930267246571, 0.0...</td>\n",
       "      <td>[0.08343035057565157, 0.06598353972865537, 0.0...</td>\n",
       "      <td>846.020044</td>\n",
       "      <td>395744</td>\n",
       "      <td>327</td>\n",
       "      <td>0.000897</td>\n",
       "      <td>2.587217</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     af    bn  sigmoid                                       train_losses  \\\n",
       "0  ReLU  True     True  [0.08286427588365733, 0.05401930267246571, 0.0...   \n",
       "\n",
       "                                        valid_losses   exec_time  n_params  \\\n",
       "0  [0.08343035057565157, 0.06598353972865537, 0.0...  846.020044    395744   \n",
       "\n",
       "   epochs  min_loss  unit_time  \n",
       "0     327  0.000897   2.587217  "
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cdftest = pd.DataFrame(cresultstest, columns=['af', 'bn', 'sigmoid', 'train_losses', 'valid_losses', 'exec_time', 'n_params'])\n",
    "cdftest['epochs'] = cdftest.valid_losses.apply(lambda x: len(x))\n",
    "cdftest['min_loss'] = cdftest.valid_losses.apply(lambda x: np.min(x))\n",
    "cdftest['unit_time'] = cdftest.exec_time / cdftest.epochs\n",
    "cdftest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "6uYhST4_VJN_"
   },
   "outputs": [],
   "source": [
    "cdf = pd.DataFrame(cresultstest, columns=['af', 'bn', 'sigmoid', 'train_losses', 'valid_losses', 'exec_time', 'n_params'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 238
    },
    "id": "Oqo94wxKdp-V",
    "outputId": "e941d595-99ef-4ad8-c4c3-230d52a3121d"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>af</th>\n",
       "      <th>bn</th>\n",
       "      <th>sigmoid</th>\n",
       "      <th>train_losses</th>\n",
       "      <th>valid_losses</th>\n",
       "      <th>exec_time</th>\n",
       "      <th>n_params</th>\n",
       "      <th>epochs</th>\n",
       "      <th>min_loss</th>\n",
       "      <th>unit_time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.1851047388433602, 0.05046032796727945, 0.02...</td>\n",
       "      <td>[0.18997623631355082, 0.06700865128391807, 0.1...</td>\n",
       "      <td>292.712491</td>\n",
       "      <td>395744</td>\n",
       "      <td>97</td>\n",
       "      <td>0.001085</td>\n",
       "      <td>3.017655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.10834828164201453, 0.04003603230057467, 0.0...</td>\n",
       "      <td>[0.05857554125420121, 0.0463885034178358, 0.02...</td>\n",
       "      <td>509.004701</td>\n",
       "      <td>395744</td>\n",
       "      <td>167</td>\n",
       "      <td>0.000854</td>\n",
       "      <td>3.047932</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>[0.14534476416171832, 0.04689668439916686, 0.0...</td>\n",
       "      <td>[0.053341817908313896, 0.0557850463759183, 0.0...</td>\n",
       "      <td>603.577671</td>\n",
       "      <td>395744</td>\n",
       "      <td>193</td>\n",
       "      <td>0.000883</td>\n",
       "      <td>3.127345</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.07646859255606529, 0.050575554454322776, 0....</td>\n",
       "      <td>[0.09337351420841107, 0.07695969449066706, 0.0...</td>\n",
       "      <td>480.848087</td>\n",
       "      <td>395744</td>\n",
       "      <td>157</td>\n",
       "      <td>0.001582</td>\n",
       "      <td>3.062727</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.06434675593873453, 0.037456673338280455, 0....</td>\n",
       "      <td>[0.07377596120974936, 0.052470214204725196, 0....</td>\n",
       "      <td>840.371446</td>\n",
       "      <td>395744</td>\n",
       "      <td>279</td>\n",
       "      <td>0.000710</td>\n",
       "      <td>3.012084</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>[0.07558034782094476, 0.04568678771009108, 0.0...</td>\n",
       "      <td>[0.07654668843164268, 0.05730005577977766, 0.0...</td>\n",
       "      <td>731.677356</td>\n",
       "      <td>395744</td>\n",
       "      <td>238</td>\n",
       "      <td>0.000759</td>\n",
       "      <td>3.074275</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      af    bn  sigmoid                                       train_losses  \\\n",
       "0   Tanh  True    False  [0.1851047388433602, 0.05046032796727945, 0.02...   \n",
       "1   ReLU  True    False  [0.10834828164201453, 0.04003603230057467, 0.0...   \n",
       "2  LReLU  True    False  [0.14534476416171832, 0.04689668439916686, 0.0...   \n",
       "3   Tanh  True     True  [0.07646859255606529, 0.050575554454322776, 0....   \n",
       "4   ReLU  True     True  [0.06434675593873453, 0.037456673338280455, 0....   \n",
       "5  LReLU  True     True  [0.07558034782094476, 0.04568678771009108, 0.0...   \n",
       "\n",
       "                                        valid_losses   exec_time  n_params  \\\n",
       "0  [0.18997623631355082, 0.06700865128391807, 0.1...  292.712491    395744   \n",
       "1  [0.05857554125420121, 0.0463885034178358, 0.02...  509.004701    395744   \n",
       "2  [0.053341817908313896, 0.0557850463759183, 0.0...  603.577671    395744   \n",
       "3  [0.09337351420841107, 0.07695969449066706, 0.0...  480.848087    395744   \n",
       "4  [0.07377596120974936, 0.052470214204725196, 0....  840.371446    395744   \n",
       "5  [0.07654668843164268, 0.05730005577977766, 0.0...  731.677356    395744   \n",
       "\n",
       "   epochs  min_loss  unit_time  \n",
       "0      97  0.001085   3.017655  \n",
       "1     167  0.000854   3.047932  \n",
       "2     193  0.000883   3.127345  \n",
       "3     157  0.001582   3.062727  \n",
       "4     279  0.000710   3.012084  \n",
       "5     238  0.000759   3.074275  "
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cdf['epochs'] = cdf.valid_losses.apply(lambda x: len(x))\n",
    "cdf['min_loss'] = cdf.valid_losses.apply(lambda x: np.min(x))\n",
    "cdf['unit_time'] = cdf.exec_time / cdf.epochs\n",
    "cdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 238
    },
    "id": "341WqeyNdx3z",
    "outputId": "ff8c024a-11b8-4281-eac4-e2c15e1e942d"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>af</th>\n",
       "      <th>sigmoid</th>\n",
       "      <th>n_params</th>\n",
       "      <th>epochs</th>\n",
       "      <th>unit_time</th>\n",
       "      <th>min_loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>395744</td>\n",
       "      <td>279</td>\n",
       "      <td>3.012084</td>\n",
       "      <td>0.000710</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>395744</td>\n",
       "      <td>238</td>\n",
       "      <td>3.074275</td>\n",
       "      <td>0.000759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>395744</td>\n",
       "      <td>167</td>\n",
       "      <td>3.047932</td>\n",
       "      <td>0.000854</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>395744</td>\n",
       "      <td>193</td>\n",
       "      <td>3.127345</td>\n",
       "      <td>0.000883</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>False</td>\n",
       "      <td>395744</td>\n",
       "      <td>97</td>\n",
       "      <td>3.017655</td>\n",
       "      <td>0.001085</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>True</td>\n",
       "      <td>395744</td>\n",
       "      <td>157</td>\n",
       "      <td>3.062727</td>\n",
       "      <td>0.001582</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      af  sigmoid  n_params  epochs  unit_time  min_loss\n",
       "4   ReLU     True    395744     279   3.012084  0.000710\n",
       "5  LReLU     True    395744     238   3.074275  0.000759\n",
       "1   ReLU    False    395744     167   3.047932  0.000854\n",
       "2  LReLU    False    395744     193   3.127345  0.000883\n",
       "0   Tanh    False    395744      97   3.017655  0.001085\n",
       "3   Tanh     True    395744     157   3.062727  0.001582"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cdf = cdf.sort_values(by='min_loss')\n",
    "cdf_p = cdf[['af', 'sigmoid', 'n_params', 'epochs', 'unit_time', 'min_loss']]\n",
    "cdf_p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 446
    },
    "id": "HMlzklZXd3DP",
    "outputId": "d6d9f1fd-41b6-4cbb-a73a-1428dbab9155"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-34-04bafa5ebdc7>:1: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  cdf_p['unit_time'] = np.round(cdf_p['unit_time'], 3)\n",
      "<ipython-input-34-04bafa5ebdc7>:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  cdf_p['min_loss'] = np.round(cdf_p['min_loss'], 5)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>af</th>\n",
       "      <th>sigmoid</th>\n",
       "      <th>n_params</th>\n",
       "      <th>epochs</th>\n",
       "      <th>unit_time</th>\n",
       "      <th>min_loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>395744</td>\n",
       "      <td>279</td>\n",
       "      <td>3.012</td>\n",
       "      <td>0.00071</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>True</td>\n",
       "      <td>395744</td>\n",
       "      <td>238</td>\n",
       "      <td>3.074</td>\n",
       "      <td>0.00076</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>395744</td>\n",
       "      <td>167</td>\n",
       "      <td>3.048</td>\n",
       "      <td>0.00085</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>LReLU</td>\n",
       "      <td>False</td>\n",
       "      <td>395744</td>\n",
       "      <td>193</td>\n",
       "      <td>3.127</td>\n",
       "      <td>0.00088</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>False</td>\n",
       "      <td>395744</td>\n",
       "      <td>97</td>\n",
       "      <td>3.018</td>\n",
       "      <td>0.00108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Tanh</td>\n",
       "      <td>True</td>\n",
       "      <td>395744</td>\n",
       "      <td>157</td>\n",
       "      <td>3.063</td>\n",
       "      <td>0.00158</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      af  sigmoid  n_params  epochs  unit_time  min_loss\n",
       "4   ReLU     True    395744     279      3.012   0.00071\n",
       "5  LReLU     True    395744     238      3.074   0.00076\n",
       "1   ReLU    False    395744     167      3.048   0.00085\n",
       "2  LReLU    False    395744     193      3.127   0.00088\n",
       "0   Tanh    False    395744      97      3.018   0.00108\n",
       "3   Tanh     True    395744     157      3.063   0.00158"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cdf_p['unit_time'] = np.round(cdf_p['unit_time'], 3)\n",
    "cdf_p['min_loss'] = np.round(cdf_p['min_loss'], 5)\n",
    "cdf_p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 458
    },
    "id": "9SeNtJLguVj5",
    "outputId": "6dfd2d80-1c1d-4df2-8340-2c3386086476"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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mxBCCCHE6Ui2bxJCCCHEGcvn87FhwwbOOussXvWqVxGNRie9/qc//Wm++MUvllx2880388tflo6yqqmpqfSheiScCSGEEOKMFYlE2LZtGzt27KCpqYmvfe1rp/qQpiThTAghhBB/Ei6++GK6uuyFIw4cOMC1117Lpk2buOyyy9i9e/cpProRp/U6Z0IIIYQ4M3z33/6Gw3uereh9Lll9Lu/86JemdV3TNLn33nt517veBcC73/1uvvGNb7By5UqeeOIJ3ve+93HfffdV9PhmSsKZEEIIIc5Y6XSaDRs20NXVxdq1a7nqqqtIJBI8+uijvP71r/eul81mJ7yP8WZczuYsVAlnQgghhJh1061wVZo75iyVSnHNNdfwta99jZtvvpmGhga2bds2rftobm5maGjI+3xwcJCWlpZZOmIZc3ZCsmbhVB+CEEIIIaahqqqK//zP/+RLX/oSVVVVLF26lF/84heAvZL/s89O3HJ9yUtews9//nNyuRwA3/ve97jiiitm7VglnM3QQCbN9/ZtJ5r9090vTAghhHghOe+88zjnnHP46U9/yo9//GO+/e1vc+6557J+/Xpuu+0273qf+9znWLBggfffK1/5Si677DI2bdrEhg0beOSRR/jCF74wa8eptD4z9gvfvHmz3rp160l7vM5kjDs69vOqRSuZV1V70h5XCCGEeKHYtWsXa9euPdWHccqN9zwopZ7SWm8e7/pSOZshL9OeGdlWCCGEEKcJCWczpJ1UJtlMCCGEEJUk4WyGRgpnEs+EEEIIUTkSzmbIHasn0UwIIYQQlSTh7ASdKRMqhBBCCHF6kHA2QxLJhBBCCDEbJJzNkEwIEEIIIU5/NTU1Yy779Kc/zfz589mwYQPr1q3jpz/9adn3c/jwYc4666wx9/vFL37xxA4YCWcz56QyaWsKIYQQLzwf+tCH2LZtG7fddhvvec97yOfzp/qQPBLOZkgimRBCCPHCt3LlSqqqqry9M//t3/6N888/n3POOYdPfepTp+SYZOPzGZK2phBCCDF9sc4/kk/3V/Q+A5EW6hZcdkL38fTTT7Ny5Ura2tq455572LdvH08++SRaa66//noeeughXvziF1foiKdHwtkMaWlrCiGEEC9YX/nKV/jud7/L3r17+c1vfgPAPffcwz333MN5550HQCKRYN++feOGM6XUuPc70eXlkHA2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",
      "text/plain": [
       "<Figure size 720x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "start = 2\n",
    "valid_losses1 = cdf.iloc[0]['valid_losses']\n",
    "valid_losses2 = cdf.iloc[1]['valid_losses']\n",
    "valid_losses3 = cdf.iloc[4]['valid_losses']\n",
    "    \n",
    "_, ax = plt.subplots(1,1,figsize=(10,7))\n",
    "\n",
    "x1 = np.arange(len(valid_losses1[start:]))+1\n",
    "x2 = np.arange(len(valid_losses2[start:]))+1\n",
    "x3 = np.arange(len(valid_losses3[start:]))+1\n",
    "\n",
    "ax.set_title('Validation loss over epochs')\n",
    "ax.set_xlabel('Epoch')\n",
    "ax.set_ylabel('MSE')\n",
    "\n",
    "colors = plt.cm.BrBG(np.linspace(0, 1, 4))\n",
    "\n",
    "ax.plot(x1, valid_losses1[start:], label='ReLU', color=colors[0])\n",
    "ax.plot(x2, valid_losses2[start:], label='LReLU', color=colors[1])\n",
    "ax.plot(x3, valid_losses3[start:], label='Tanh', color=colors[2])\n",
    "\n",
    "\n",
    "ax.legend()\n",
    "plt.savefig('conv_mse_new')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "dPrnF3pkl0-1",
    "outputId": "911c6633-493e-426c-ed4c-75e871aed8fc"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epochs:  12%|████████                                                             | 176/1500 [08:52<1:06:42,  3.02s/it]\n"
     ]
    }
   ],
   "source": [
    "n_epoch = 1500\n",
    "criterion = nn.MSELoss()\n",
    "convnet = ConvNet(bn=True, af=nn.ReLU(), transform_output=False).double()\n",
    "sgd = torch.optim.SGD(convnet.parameters(), lr=0.01, momentum=0.9, weight_decay=1e-3)\n",
    "\n",
    "train_losses, valid_losses, convnet = train_model(convnet, train_loader, test_loader, criterion, sgd, device, n_epoch, early_stop=True, patience=30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "HIILQHEqMpu-",
    "outputId": "20cc2b96-b1dd-47e2-edfb-2a4053ce6621"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.0008845511059950783, 0.0010286927727580616)"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.min(valid_losses), valid_losses[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "wZKVdiFtP7yv"
   },
   "outputs": [],
   "source": [
    "convnet = torch.load('./models/convnet32_2.model')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "TeT2WI4fo583",
    "outputId": "a1c7621a-76c0-4436-940e-6f713ea30f49"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0008971235549863725"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ev = utils.Evaluator(model, dataset=test_loader.dataset.data)\n",
    "ev.calculate_loss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 449
    },
    "id": "58D1RLxFQ7eA",
    "outputId": "7bd5e7b3-588c-4a3e-d763-4b0fef4ae8df"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 504x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ev.plot_average(avg=0.00071, filename='conv_pred4')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "g6e-kGDbMnei",
    "outputId": "3f237b34-ed0f-42b3-e0f0-98dc33522d5b"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.07500632644663335"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_ev = utils.Evaluator(model, dataset=test_data)\n",
    "test_ev.calculate_loss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 449
    },
    "id": "WZi4KGBpt2Tj",
    "outputId": "6503db96-51ac-4041-c90b-e342976a938e"
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ4AAAGwCAYAAACZ2gNJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAAsTAAALEwEAmpwYAAA67klEQVR4nO3deZxcdZnv8c9zqqqXJGQBQghrEJFFlMgAgrswOjgTxXEUHUdFRbnOa5xxG/fdK6+Lc+9VdMbRi9uAKwwioCMoIl5xuQgoCrLIYoAEQoCQtdNLVT33j6pg0zlPUidd9auu6u/79cqr06dO/c7vdFf306fqW8/P3B0REZFUsm5PQEREZhcVHhERSUqFR0REklLhERGRpFR4REQkKRUeERFJSoVHRESSUuGRjjAzb/6rm9nBO9jvqkn7vjbn9mPN7OtmdreZjZnZRjO708y+a2bvMrO5U/ZfOWm86N92x9nFczzCzC4ws7VmNmpmt5nZR81suOA4LzWzfzWzq5vn52b2tRbu9zQz+76ZrTOzrWb2OzN7q5mVcvZdbmYfMbOfm9n9ZjZuZqvN7JtmdvQOjnG0mf2nmT3QvM89ZvbvZrYk2H9HX/81Rb4u0r/K3Z6A9LUqjcfY6cD7pt5oZocAz5m039TbXwWcCxjwY+A7wFbgQOAZwArgIuCOnGN/GlgfzOuGIieRx8ye2pxTBbgQuBc4EfgQcJKZneTuYy0O9wHgKGAzsAo4rIXjnwJ8GxgFzgfWAS8EPgU8HXjZlLt8HngqcD2Nr9lmYDnwCuClZvZyd79oyjG2fX3LwHeBPzTn9ibghWb2dHe/J2d6G4Czc7Zv3tl5ySzh7vqnf23/BziNX6LXAvcD5Zx9PtHc76Lmx9dOum0OjV9gVeCk4BhPAxZO2bayOdayDp5bCbi5eZwXTdqe0ShCDrynwHjPBQ6hUWCf07z/13aw/3xgLTAGHDNp+xDwi+b9XzHlPv8IPD5nrL9r7v8QMDBlrDXN214y5T5/29x+ac54K4GV3X786d/M/qen2qTTvgDsTePq5FFmVgFeS+MX5c059zuSxi/Ym9z9yryB3f0X7r6+nZNt0bOBw4Gfuvulk+ZTB97V/PRNZmatDObuV7n77e7eav+qlwKLgW+5+3WTxhmlcfUE8PdTjvGv7r7dlaG7fx24HdgDeNKkm54GLAGu8ylXQu7+TeC3wAozO7DFOYs8SoVHOu2bwBbgDVO2vwjYi0ZhyvNw8+M+U1/HabdJr0ssa/EuJzY/Xj71Bne/i8ZTUgcCj2vPDFs/PvBTYAR4mpkNtjjeRPNjddK2vZsf7wrucxeNK7QTc24bNLNXmdn7zOwtZvbcvNedZPbSazzSUe6+ycy+BbzWzPZz91XNm94IbAQuIOf1Hxq/2K4FjgV+bmZfoHF19Ht3H2/h0G81s/XBbWc1rw521aHNj38Ibr8deELz353TOE7h47t71cz+CDyRRuG7ZUcDmdnxwBHAauCmSTc91Px4UHDXbUX10Jzb9ga+OmXbH83sde7+f3c0H5kdVHgkhS/QCBi8HvhY8+mZ5wH/x91H8p6Rcnc3s5fSCBc8B/i35k0TZvYbGq8Lfc7dNwbHfMsO5nM2jRfltzmJRkhgdYvns6D5cUNw+7btC1scr6i2HN/MdgfOa376NnevTbr55zTCGcea2Snufsmk+51KIwwBsGjKsF8BrgZ+D2yiUaDeDJwBXGZmJ7j7b3c0L+l/eqpNOs7drwFuBF5vZhmNp90y4qfZtt3vHnd/Lo2/yN9C46/ou4DjgLOAG80s+ov8IHe34N/6Kce5091vdfeJYKy+03z68hIaoYZ/cff/nHy7u2+h8TV34CIz+46Z/YuZXQp8iz8lA+tT7vdRd/+xuz/g7iPufpO7vwn4JDAMfKST5yW9QYVHUvkCjdc9XgC8Drje3X/Tyh3d/RZ3/4y7v8bdD6Pxwv4vgQNoxIdT23ZFsSC4fdv29TPx+M2i8180IumfdPd35+3n7ufRuBq8gsZV51tofM1fC3y9udvaFuf8+ebHZ7W4v/QxFR5J5as03oPzeWBf4JxdHcjdbwVe3fw078XtTrut+fEJwe2HND9GrwF17PhmVqbxukyVnGCAme0GXEYjmfcv7v6OHR2ombg72d0Xufuguy9vFqQnN3e5tsU5P9j82NGgiPQGFR5Jovn01oXAfjRSbt+c5pCbmh9biiy32Y+bH0+eeoOZPY5GQbibOBHWsePTuKKYA/zCp7yB1cwWAD8EngmcGV3p7IyZLaTxZtUHaVwNteL45sdOfU2kh6jwSEofAP4a+At337SjHc3sIDP7p+Yvy6m3GfD+5qc/ne6kzOxgMzus+d6iVvxfGmmxZ5nZiyaNk9F4UyzA5ye/L8fMKs1jhO2DCriQRursFWZ2zKRjDAEfb376ucl3MLNFwI9oFIAPu/sH2Inm1dHUbXNoBD4WAh+aXNzM7PC86Hszpr4tHLLTVkDS/5Rqk2S80V4lr8VKngU02t78TzP7OY2o7yYa7/05kUZaai0QPVW0ozj1T9z9J5M+v5LG608H0Xjn/Q65e83MXkfjyuNCM7uQxnmdBBxDIxE29bWnfWkUq7uBZZNvMLMXAy9ufrrt/TMnmNl/NP//kLv/86TjbzSzN9IoQD9pxtXX0Xhv1KHN7edPOf5FzbndCWRm9pGcU7vY3W+Y9PlpZvYO4Cc0uk/sQeNKZynwaXf//JT7vxx4h5n9tHmem4CDgb+i0Qnh+8D/yjmuzDIqPDJT3ULj6uj5NP5KfzmwO403R94BnEnjl9+Dwf13FKeGxi/TXebu15jZscBHm3PcjcYv24/ReJ9Qq33aoNEz7bQp2x7Hn94rczfwz5NvdPeLzezZNK78/obGL/Y7gLcDn8npgrAt/Xcw8OFgHit5bB+762h8H06mUXQ2Ar8CTnf3y3LufxWNwvcUGv3i5tIIOPyMxmt8Xy3QnUH6mOlxICIiKek1HhERSUqFR0REklLhERGRpFR4REQkqWml2szsZBqR1xLwRXc/a0f7L7Cy75W1+lYJ6WsKtbSPvpQyA61lgg1ey32D9y4Xnub6Gp+l0WV4FXCtmV3q7nmLegGwV1bhM3OX7eohpY/4hH5btktdX0uZgd5Wuzu8bTpPtR0H3OHudzXXR/kWcMo0xhMRkVlgOoVnX+DeSZ+vam57DDM7w8yuM7PrNnp16s0iIjLLdDxc4O7nuPsx7n7MfFOjBBGR2W46hWc1sP+kz/ej9RUcRURklprOJci1wCHNFSBXA68AXrmjO5hBVp5+F/t6VS+m9jqr5D8OFDoQ6X+7XHjcvWpmbwZ+QCNO/WV3/33bZiYiIn1pWi+6uPv3abQ6FxERaYk6F4iISFIqPCIikpQKj4iIJNWTb6xpRzJuR5Sa6x6l3UT6n654REQkKRUeERFJSoVHRESSUuEREZGkVHhERCSpnky1dVonU3NKzO0apd1iWfC10QJxMlPpikdERJJS4RERkaRUeEREJCkVHhERSUqFR0REklKqLbF2JeaUjmtQ2i2mtJvMVLriERGRpFR4REQkKRUeERFJSoVHRESSUuEREZGklGrrUUrH7ViUdovMphSc0m7SbbriERGRpFR4REQkKRUeERFJSoVHRESSUuEREZGk0qbaLD9tNJsSRTNN0XTcbEvBzabHptJukoqueEREJCkVHhERSUqFR0REklLhERGRpFR4REQkqRnRq61oX61e1uspqdnWI04935R2k/bTFY+IiCSlwiMiIkmp8IiISFIqPCIikpQKj4iIJDUjUm2zSacTfL2SqurXHnGzqReh0m6yq3TFIyIiSanwiIhIUio8IiKSlAqPiIgkpcIjIiJJJV+BtF29vrqhF5JV/Zqa6+UU3Gzr96a0m+yMrnhERCQpFR4REUlKhUdERJJS4RERkaRUeEREJKmdptrM7MvACmCtux/Z3LY7cD6wDFgJnOruj3RumjPDTErkdSu11a7UXKeTW728Umq/puCitFtEKbj+1coVz38AJ0/Z9h7gSnc/BLiy+bmIiMhO7bTwuPtPgXVTNp8CnNv8/7nAi9s7LRER6Ve7+hrPEne/v/n/NcCSaEczO8PMrjOz6zbUa7t4OBER6RfTDhe4uwPhk7Hufo67H+PuxyzIStM9nIiI9LhdbZnzgJktdff7zWwpsLaVO5l1vqXLTNLJF307HXTo9Ivq/RpSmElhhF4JHUTUeqd/7eoVz6XAac3/nwZc0p7piIhIv9tp4TGzbwK/BA41s1VmdjpwFvA8M7sd+PPm5yIiIju106fa3P1vg5tOavNcRERkFlDnAhERSUqFR0REkkq8EJzNqrYz3UjwtSvJ1CstZ2Zae5m8r1uvtDfqlRSc0m69T1c8IiKSlAqPiIgkpcIjIiJJqfCIiEhSKjwiIpJU2lTbDDOTEnaRoomoTifpiiafZlo6rhtJr17o9wa93/NNabfeoSseERFJSoVHRESSUuEREZGkVHhERCQpFR4REUkqca+22bUCaRFRcqhbybsoWdWtlUO7lY5TCq5/024RpeA6T1c8IiKSlAqPiIgkpcIjIiJJqfCIiEhSKjwiIpJU0lSbAVk2u2tdvV7P3d6ttF+n03S9no7rZAqu06vFzrbVX9tFPd86b3ZXARERSU6FR0REklLhERGRpFR4REQkKRUeERFJKn2vttLs7tWWdanWdzpN1yvpuJmUguvlue+Kfu35prRbcbriERGRpFR4REQkKRUeERFJSoVHRESSUuEREZGkEqfajFIlfa3z+gxKnQSpvnqts3PsdJquXslPzRXVrnRcL6Tg2tUHrl97vint1r90xSMiIkmp8IiISFIqPCIikpQKj4iIJKXCIyIiSSVfgbQbvdradUzvYPKslAXJnnYl8jqcpmtXaq5d6biis+lGCq5dKbKZlNSD9qXgen2F07y0m5JuDbriERGRpFR4REQkKRUeERFJSoVHRESSUuEREZGk0vdqGyhNexivtSf5VFjBdFw7EmNRIq9dCbt2/eXRru9I0XRcu1ZW7UYKrtN96SLq+dY9UV+3SL+m4HTFIyIiSanwiIhIUio8IiKSlAqPiIgkpcIjIiJJ7TTVZmb7A+cBSwAHznH3T5vZ7sD5wDJgJXCquz+y48HAgp5kRVg2/WTcrijaN61UYJqFk3pt6r3WrtRcu3rNFU3H9UIKrtN94Drd801pt+7p19VNW/n5qQLvcPcjgOOBfzCzI4D3AFe6+yHAlc3PRUREdminhcfd73f3Xzf/vwm4BdgXOAU4t7nbucCLOzRHERHpI4WepzCzZcBTgGuAJe5+f/OmNTSeisu7zxlmdp2ZXbd+YmI6cxURkT7QcuExs3nAt4G3uvvGybe5u9N4/Wc77n6Oux/j7scsrFSmNVkREel9LRUeM6vQKDpfd/eLmpsfMLOlzduXAms7M0UREeknraTaDPgScIu7f3LSTZcCpwFnNT9esvOxoFSZ+QnuMNHVhkRePUh5FU3qRWmxIkk62EGarsMrlkYK90wrPH5nU3B5Sal29V4rms7q9HEj7VrhVGm3WK+n3VppEvp04NXAjWZ2Q3Pb+2gUnAvM7HTgbuDUjsxQRET6yk4Lj7v/DIj+5DmpvdMREZF+N/Of9xIRkb6iwiMiIkmp8IiISFLJVyDNyt3ps5YnSoZZB8uxBSmpSLsSdkXTdEVTc+1KxxXtHVe0R1zHU3CV1o/Qrt5r7UpnzbSeb0q7FdcrK5zqikdERJJS4RERkaRUeEREJCkVHhERSUqFR0REkkqaauuZXm0FV80sol4r2Pcqa89c2pWm61Y6rmgaLTKTUnBFEnCNsYspOvdeWeFUabf2KZqCixRNx838KiAiIn1FhUdERJJS4RERkaRUeEREJCkVHhERSSpxqs0oD3bukJ1eHdMLJsPyWJtSakWTd1Garmi/um6l46yUv3+nU3CdTJJFCbh2rHoKne/5prRbQz+m3YrKTcft4IdBVzwiIpKUCo+IiCSlwiMiIkmp8IiISFIqPCIiklRfrUCatels4vRasTpdJHlWNJFXNGFXNE0X9i7rcDouTMHlD9PxFFzRFVGLPELiR1l7Vj1V2q298ykqb/6zKem2I7riERGRpFR4REQkKRUeERFJSoVHRESSUuEREZGk0q9AOpA2SLcj3UivRftGibyicyzewy1If0X9woJ0XNt6xwXj90oKrojoURaNHSbpsqDnm9JuO9SNtJv6ujXoikdERJJS4RERkaRUeEREJCkVHhERSUqFR0REkkreq603Um1Fx5l+qi3ev+CKn8H4cS+1IPlUz0/fRDqdjutWCi762yyL7pHT261oH76iabd4nGJpt8LzUdqtbWZb2k1XPCIikpQKj4iIJKXCIyIiSanwiIhIUio8IiKSVNpebZlRHqp0bPyiibF4nM6l3dqVais+TrHUWafTcT2fgstaX4k1SsAVT6nli76W0eqpYdot+toHiSul3XZtPkX0a9pNVzwiIpKUCo+IiCSlwiMiIkmp8IiISFIqPCIiklTiVFtGeWhgu+3tSpEV1Y0UXNG0WKd7tbUr1VZ0nCxKo1Vr+du7lIKrkz+fYv3UivV7a1faLRKvaau0246OG1HarThd8YiISFIqPCIikpQKj4iIJKXCIyIiSanwiIhIUjtNtZnZEPBTYLC5/4Xu/mEzOwj4FrAHcD3wancf38lYlAa379XWrnRZUYX7nXnBvFGhlUmLpsu6k0YrOk69Go0fpdGCpFSHU3Bx1quUP06Bnm9F+70RJOnalf0susKp0m47Pm4kbz6dTLpBPPdIt1JwrVzxjAEnuvtRwHLgZDM7HvgE8Cl3fzzwCHB6x2YpIiJ9Y6eFxxs2Nz+tNP85cCJwYXP7ucCLOzFBERHpLy29xmNmJTO7AVgLXAHcCax392pzl1XAvsF9zzCz68zsuodHRtswZRER6WUtFR53r7n7cmA/4DjgsFYP4O7nuPsx7n7MHnOGdm2WIiLSNwql2tx9PXAVcAKw0My2hRP2A1a3d2oiItKPWkm1LQYm3H29mQ0Dz6MRLLgKeCmNZNtpwCU7PZoZpcHte7UV5d7ZJEbh3nFt6LNWOEUWJezalF6L0mJFU23xyqTtmU+UgrNw/sVSP0V7vtUm8rYW6eAGVPKTdFYK5lILEoVBmi6itFvnzaS5QPd6vrXSJHQpcK6ZlWg8Ri5w9++Z2c3At8zs48BvgC91cJ4iItIndlp43P13wFNytt9F4/UeERGRlqlzgYiIJKXCIyIiSSVeCM7I2hAuaJuCIYWiL4jnisYI5hIGFNoVIqgFC52V81/gjkMH7QkXRC12ohBBp/evTRSbf+4xO7rIXHyPTi80167QQXjcgi/Edzp00MkX4nsldFDIeDyGrnhERCQpFR4REUlKhUdERJJS4RERkaRUeEREJKnEqbaM8pzh7bZ3ugVOlCQrKpxnG9JuYUoqOGaULiuamsuKptRKwcJoQQufaPy4BU7RheOidFw0fpC4ir6egWKtd9qzyBwTRReI65G0WyX4nvdACxzoXtuZXqYrHhERSUqFR0REklLhERGRpFR4REQkKRUeERFJKmmqjczIhqe//HXhhdoiRXqsNQ4cbO5gr7aol1qUBIp6uAXjeDROlAorB+NE6bggBReN064UXNyrrVh6LVLoex6IFpmL+sNlwQJxnU671QouKFdUFiUNC6bdIt1aOC7vuEXnPtMSfO2iKx4REUlKhUdERJJS4RERkaRUeEREJCkVHhERSSpxqi0jG96+V1sk7M9V9LhFe8EVTM0V6uHWrpVGg5RamJqLUm3B9nopSJFF4wT7RyucWjVI61j+30JRjzXLorRb/vjx9vTpuFqQRitV8s+1W2k3KxVMYgXbo+N6wdRclFILj9ulFUs7aSbNZVfoikdERJJS4RERkaRUeEREJCkVHhERSUqFR0REkkqbarMMhlpPtVmnVyYNeq8V7eFmRcaJ+r21KaUWpuaiXmpR6qxgCi4aP4tSc+MT+ccNe8EFfyMVTq9FmchqsD29dqXdrFQw/RVsz4JxurZiacHUadEEWCfTbp1erbRX0m664hERkaRUeEREJCkVHhERSUqFR0REklLhERGRpJKm2izLsKE5nTtAlC4L92/PCqRhCi5n/7D/XD1KtQXJmzB1lp/OCtNiBdNrRCm1ifzjhuNYkDqLxs+C8wp6uNWs2P6Roj3cOqlo2i1SJ0ggBvt7qdiKpV1LuxVcsXQmJcBmW9pNVzwiIpKUCo+IiCSlwiMiIkmp8IiISFIqPCIiklTSVJtnGT48t4MHmPmptii1FY9dLF1WdHuYjqvm91KLUmpZKX//8Lil/FUzfSLo4Rak0eoWHDdaOXS8WBotWuF0JonSblGPNcj/2kdpN6tH4xRLu9UKrjTaLu1KjLWjh1vRFFm30m6RdqXgdMUjIiJJqfCIiEhSKjwiIpKUCo+IiCSlwiMiIkklXoG0RH2od1Nt4Uqj0Th5+3c41Ram5mrFUmdU8x8aFvVki1JqBVNwHvRwI+qxFu0fzLOwLvRk67ygp1k9SKll+Y/v+KctfxwrFft565UVS2fK2CkUScFFP5qgKx4REUlMhUdERJJS4RERkaRUeEREJCkVHhERSarlVJuZlYDrgNXuvsLMDgK+BewBXA+82t3HdzSGZxnVoXnTmW9jLkV7rEWCJFk4fsFUW14KLlxpNJpLuDJplEYL0mv1gfzxg/2tWskfpxyMXzQFF0RePEivWdTDLVrJNBonSKmF+48H59sGHvX4K7h/4XMKUmrROFklP7FI0COuFswz6h3XKyuWRjrdT22mHLOdilzxvAW4ZdLnnwA+5e6PBx4BTm/nxEREpD+1VHjMbD/gr4AvNj834ETgwuYu5wIv7sD8RESkz7R6xXM28C7+dDW7B7De3bc9j7IK2DfvjmZ2hpldZ2bXPfzIhunMVURE+sBOC4+ZrQDWuvv1u3IAdz/H3Y9x92P2WLRgV4YQEZE+0kq44OnAi8zsL4EhYD7waWChmZWbVz37Aas7N00REekXOy087v5e4L0AZvYc4J/d/e/M7D+Bl9JItp0GXLLTsazExOBuLU8u7I1WVId7slmQpymSamvb9iB1ZrWgd1m0cmg0TpReC1Jwno3l7x/1QAvSa1Hjp8yCi/ZshwHLaQsTaeXtt3vYK6xYq8SiKbh2qU0Ej+8gpdbrK5ZGivZZy0ueFVmtdEdjR3ol7Tad9/G8G3i7md1B4zWfL7VnSiIi0s8K/cnl7j8BftL8/13Ace2fkoiI9DN1LhARkaRUeEREJCkVHhERSSrpCqRuGWOV6a9AarQnoRH1ZIvTdMX2zxs/8/ak17J6fvorC1YajVJtWZiCC9JlE0FaLEiRWRb0+SoFD71SlIIL+m0Fxy36F1WYsgvESbUiglVYg5VAo+2RKAWXBSuBepBGi3qstWvF0uBHIkzNRWZaD7eZZKal3XTFIyIiSanwiIhIUio8IiKSlAqPiIgkpcIjIiJJJU211S1jtDz9FUiLinupFeyDFKTawqRaTtot2jcLk3H5+5eC1FlWD9JrQQquVA3SaNH4pfyebFYOViwdH83fP1w1M0jfBD3ZiieZCu4fJMOK9E0L02XlID1V8Jjx+FE6LnistWnF0iiNFn3tvdQbPdyiZFj4mMrps1Y0XdauHm6RbqXddMUjIiJJqfCIiEhSKjwiIpKUCo+IiCSlwiMiIkmlTbWRMVKf07HxzYolMbKo91q4PUgDBcfNspwVSIOxSx6k0aJUWyl//1KQaivV8tNr9Sw/jVaq5fdM86D3WhZtD1YOJerhFqTXLNgefcfblXaLFOrVFqXRgiRj0SRd8bRb/tc+Hqc9Pdy8FqQ/oyTjTOvh1pb+fO3R62k3XfGIiEhSKjwiIpKUCo+IiCSlwiMiIkmp8IiISFJpU22eMVIbmvY4bVuBNApcRam2IL0W9nCznF5tQZamlLNvY3uQUsuCtFuWv385SK+VSwP549Tyt5ez/N5rpSClFvZYK9h7LRonyjcVTrsFiaWohx71/K8Pef3/6vk/ZqUoJRWmy6LebsVWLI3GidJu9aA3mnq47Vhe8ixKnc20FUIj0Tzzd45vSlp4pHe519g8/gtGxn7O1uofmKivxalTtvkMlQ9hNzuMRZXnULLpL20uIv1NhUd2yL3O+tGLeWjkXCbqa7a7veoPMzr+R9bzQ1aPncMelZNZOvgaFSARCanwSGii9iCrN32YkYnrARgo7ceiyvOZUz6CwWx/sIxq/WFGqreycfwqNtd+y4MTF7O++nMOHHonu5WP6vIZiMhMpMIjuSZqD7By/ZuYqN9HyRax97x3MH/wJCpTOiAMZHsxp3w4S8ovYKR2J/eOns1I/Q/cufX9HDT8QRaxvDsnICIzllJtsp26j3HPhrcxUb+PofLhHLz7N1gw9Lywbc02c0oH84Q5Z7Nn5UU4E/xx68cZqf8x0axFpFckTrUZWyYGpz1O0Z5skejXaNH0WrR/KWd7XtINoBxsj/cP0muWn3YrByuHVrLte7it2/DvjNXupFJaxtI9v0A9W8C2vepBeq0yafveA++kumWC9WOXsbL6rzxh3r9hNuWhFkUKg+1RCi7qd5a3+usO948SZsEqtRb1QcvpRxau+FnL/1paNUqddXbF0mh7qVIwHTfberhVgu9LFxJpne7h1i664pHHqFbvY+OmLwMZSxZ9nFK2oPAYZsY+c99GJdubrfU7WDfxw/ZPVER6lgqPPMamLecDNeYN/wVDA7seDijZHJbMeQMAD41digdXDiIy+6jwyGNsGfk+AAvmvGzaYy0YeC4l242t9TsYq6+e9ngi0h9UeORRtfoGqrV7MAYZGnhKuN+GrZdxx4MruPWBY7njwRVs2HpZ7n6ZDTK3dCQAW2t/6MicRaT3qPDIoyYm7gSgUnn89mGApg1bL2PNxjOp1tcATrW+hjUbz+SR0fzXcYZLBwMwWl/ZiSmLSA9Kn2oby09XFdGuVFvYqy1KtUVBrGhV0ZxeVtHY5ZzVSiFOu5Wy/G9dJejhVg4KSc3+lKwa2/Y6TLaAsVL+SrEPbvl3nMf2a3NGWbP1HObNO2W7/a20EICq1alW2r/6bNhLLUyvBY+daHuYaouSats/vouuKFp0xVKrFkuFFd8e9MkLt7enh1v0dbCghxtBOm4mKZo665UebkXpikceZdaIutfrm8N9qrXt2+YAVOsP5G6v+Rag8bSbiAio8Mgk5cohAFQnbsM9eJ9Qae/87dmS3O2jtdsBGCwd1IYZikg/UOGRR2XZQkqlA4AxxsZ+nbvPot3ehtljl7YwG2LxvDdvt2/dxxiZuBGA4cphbZ+viPQmFR55jKE5LwRgy5Zv5N6+29wV7LngY5RLSwGjXFrKngs+xoLhF2y376bRK6n5BoZKhzCQ7d/JaYtID1GTUHmMOXNfxZZNn2Nk5L+YN++1DA4u326f3eauYLe5Kx67sbr1MZ/W6yM8tPlzAOw+/BIsSmaIyKyTtPDU6sbm0elfZLXrd1icaov2L5Z2y0u1RQGecilKr+Ufs1LKT/BEqbaBIIFUn7o9O5jBuX/P2JbP8vC6d7For++STWqbs93+TT4prePuPLTpTCbq9zFYPpR5c/+GCZt+mjH/wEHPtKKptlr+a1p5KTUAq+R/nXN7tQVpqyzo1ebB9qwa7B+sHNrpHm5xT7ag317BHm5Z8NivFZxP1HstTBW2SV4irVtptJnWw01Ptcl2hua/m1L5CdSqd7L+wb+jXnu45fu611i34X+weeQijAH2XvBRrFNFR0R6kgqPbMdsiIV7fo2stD/Vid/w8AMnMjry3fB9JNuMT/yB+x98JRu3fBWosHj3TzFUOTTNpEWkZ+g1HslVKu/Lor2+w8Z1/8jE2C/ZuO5NlMqPY+7cl1AZWE65fBBmZWq1NUyM38TDI99ldOz/Ne5b2pvFi85iePCpUBvdyZFEZLZR4ZFQqbSUhXtewNYt5zGy6d+oVe9i44b/Fe5vNsy8OX/N7vPfSpbtlnCmItJLVHhkh8wy5sx7LcNzX8X46I+ojl3F+PiN1Kr3A3WybCGVgScyp3IUc+f8FaVsfrenLCIzXNpebXXYMjpzYrUFF8EkC26IU23bbyuXor5u+S+3VYJVJytBv6pKKT/hVCu4vb7dy3+DMHgKw8MvYDhn/0EbowZMt1tWtHJo3DMt/4gebCfYXnQcqwU/OpWcXm1BLzWPeqwF35MsSK/Vw5VMO93DrWhvt/b0cLMgNRe+ZF1whdO2rUwarWqbN0aXUmddO25HRxcREZlChUdERJJS4RERkaRUeEREJKmWwgVmthLYROO146q7H2NmuwPnA8uAlcCp7v5IZ6YpIiL9okiq7bnu/tCkz98DXOnuZ5nZe5qfv3tHA9TqsGlk5qycVzSlVrS3W144qRwkdYLAEuUg4TRYCXq4BSmVWrTdg/5Z0fao31b0RQiuqaNVW82DNFrUk61gSs2ChJMHvdei/aOklFe37/lmwTc32h71cKtPRI/XoNdZlIKrBn3sCq80Ghw3SG7W89vhFZYFj7WiPdxqtZnzu6ioXl+ZdDpPtZ0CnNv8/7nAi6c9GxER6XutFh4Hfmhm15vZGc1tS9z9/ub/1wD5S1CKiIhM0upTbc9w99VmthdwhZndOvlGd3cL1gxoFqozABYtPmBakxURkd7X0hWPu69uflwLfAc4DnjAzJYCND+uDe57jrsf4+7HzJ2/uD2zFhGRnrXTwmNmc81st23/B54P3ARcCpzW3O004JJOTVJERPpHK0+1LQG+01y6uAx8w90vN7NrgQvM7HTgbuDUnQ1UrzubN7fevyjS6VWUg7BOuHxzEDzLTd9EqbMw1RZ8h6q1/HEqwUC1gaAnU5hqyz9u0e9euGpr0LcrC1ZWjdJrWXkif/xa0e3BYnXB+JSDlUnz9s/p3wbFe7hlwQPNy8E4tSjtFvQWq3a6h1t7ViaNVnQtKuoF18mVSXsljdbpHm47LTzufhdwVM72h4GT2jILERGZNdS5QEREklLhERGRpLQQXJdtmljLvSPXs3bs94zXtzBRH8WpU8mGKNsQe805iAPm/hmLhw4mC96hLiLSS1R4Ert/6++5cf13uGfkelaNXM/6iVUt3W+4tIAD5h7NAXOP5rAFJ7F88fNViESkJyVegdTZsiVICbVBlDorKuoFFa40GqRjtqV1qj7OrZsv4doN/4e7R3/6mH0GbC5Lh5az7/ByhksLqWTDgFGtjzLuW3ho/FbuHfk1m6pruG3jVdy28SquuP9/s+cfH8czFv83jl/8euaV93h0vMGB/Dm6BwmhIKTiXuyhEZXAzPJzcKUs2p7f0CsLklulev7jqR6m3fLHL+X0WAPwKL1WGs/dTmn7r5uX8scu2sMt3B6uQBr1ZOvsyqSRbq1MGrX/i3RyZdIiq5JC8XRZp1Nz0XzyJxPfpCueDtpaW88v15/Nrzd+mc21NUCj0Dx5/ss5aM6z2GfoaPYceAKZlSgH39BK84G0YeI+Vo1cz91bfsX1j3ydh8bu4uJV7+Z7qz/E0bu/nOctfSdLh5+Y7NxERHaVCk+H3D5yGd976B/YVFsNwOKBwzl2/pv4s0WvYqg0v/B4Cyr7sGDBPjxxwQs5eelHuH3L5Vy99nPcsuFyfvXweVy/7pu8YJ8PseLAd1MyfVtFZObSb6g2G62t5wfr3slvN58HwH6DT+XP9zyTA4eeiZlRCZ4mKCKzEk9auIInLVzBg6N3csX9Z/GLh77E91Z/kBvXX8zrDvkK+849ctrHERHpBL063UZ3bb2Sz60+mt9uPo+yDfH8PT7B6/f7CcuGn9W215+mWjx0MK886Au8+Qk/ZNHAAdy95Xo+/ttjuGzVWXj0Ao6ISBep8LTJTZvP5xtrXsSm2mr2GzyeM/b5FU9b9DYyC3rhtNlhC/6c9x95I89acgZVH+eiu9/HV+88g3rRV1ZFRDoseaptZKRzqbaiohVIw/1L+XX6ptGvcMXmfwKcY4ffxjPmfoRsvMSWnARVpZI/RhwuyN+/Opi3fR5/s9/nOXTeCv7jrpdz9QNfYvP4Jl590NeoBym1KO0WseD1oyxIJpXqwf5h2i0/lhel3Uql/P0tSJJlQRrNg6Z4cQ+3YHtl+8e3VYMea0Hvtejq2KL9w7RY0ZRae1Yg7dbKpBELfm6jVWSl83TFM023jl7waNF5xtyP8qx5/z3ZVU7kyIUr+PtDLmcom89vHrmAb658A3WffnNWEZF2UOGZhpXjP+LyzW8EnGfO/e88dc47uj2lRx282zN50yGXMZDN4dp153HR3e/q9pRERAAVnl02Wl/HDzadgVPj2OG3c9yct3V7Sts5aN4JvOHgiylZhSvu+yS3rP9Rt6ckIqLCs6uu2vJORnwt+5afxjPnfqTb0wkdOv/POXnphwA47443MFrb1OUZichslzZcUHO2bglajcwg0Yu721rprKx9n1snzqfMMM/MPs3WrTVg+xcqSzkvak6E4YL87YODwcJuwWJVeWGBpy96J79bfzH3jlzP+Xe+k5cf+Pnc+05mQR+46HXacpY/z3IQRigH4YKq5b9oX83yt5eDcEE5CBHUy/n7Z9X8/S0LHq/B+eZtLxwKKLp/FEYoHCLo7IJvkXYtEBcFXKKflWj8Wi392xB6ZYG4dtEVT0Gj/gg/nWi8lnNc+YMsyB7X5RntXMnKvHLZVyhZhV88dA63bdRTbiLSPSo8Bf2mejZbWcvedgJHlt7Y7em0bJ/hIx99yu2ie9+mN5eKSNeo8BRQ9a3cVvs6ACdUPho+HTVTnbjkncwv782a0d9z5+aruz0dEZmleus3Z5fdWb+YMR5hsS1nr+zPuj2dwsrZACcsfgMAP3vwc12ejYjMVio8Bfy++iUAjii9vssz2XVP2/MMMkr89pFvs2Hi/m5PR0RmoeQtc7ZuHkt5yB0qkr55yG7gwfJvGPCF7Df+V4yO/yntFI1TrmyfTiqN59f6ykD+tyJK2AwGi3/tzBD7cPj8F/L7jRdz9Zov8MIDPpS7X5heC5JAYaotWPCtEu4fpeDyU221IDVXC1JwpeC49VKw4FvUGidcIC5vIbjgexWl16IF36IUWbT/RPBN7FJKreg43RItNOdBOq4XzLTUnK54WnSP/RcAB/NSyszp8mym5/hFZwBw44Zvd3kmIjIbqfC0aJ39DoC9/eldnsn0LZv7DDJKrB27mfHaSLenIyKzjApPCxxnnd0IwB48ucuzmb6BbA57DR5BnRqrt/6229MRkVlGhacFm7mbcdvAkO/JHJZ2ezptse/w0QDcO3J9l2ciIrONCk8Ltj3NtgdPxuiNF0h3Zr9thWfLr7s8ExGZbRKn2uqMbp05qbZWF4J7aPBmKMP8icMZndi+d1fUKysv1Za3DaBWq3NH7UKuq5/JZlYzj305Jns/T5z7ty3NcWemnuuepaMAWD1yI2Pj2ydbSlF6LdheiRayq+ef70SwvRIsHFc0vVYP0nH1gmk3D7ZH/dRyk2pRei3Y7sEbk4v2cAvTa9H40TiBdqXU4t5xxRJXURrN6kGiq+A6cOH5FujtlgXnWq8XWy8rC37e6tXeSN4lLTy9qmpbABjwhR07xh21C7m6/nZqbAVgM6u4uv52KuNlnjDwsrYfb05pdwDG6pvbPraIyI7oqbYW1BgFoMRQx45xXf3MR4vOn467lV+Of6wjxyvbMAAT9a072VNEpL1UeFrgzRb+RueWtN7M6vztvqojx8ua51L3Di94LyIyhQpPC0o+CECdzr0+NY9987fbfh05XtUbV3GVbLgj44uIRFR4WlCiUXiq1rmnpY7J3k+JxxaBEsOcMJDf0ma6JrzxxlEVHhFJLWm4wOvO+NYeWIF0SnplwJbAIKyv387YyPZXPVnQ2KyW0yurWsn/ku8/eArHW40b7H+whfuYyz4s9/dyYP3FjI1OtDz3KHgzNiXxc/+WWwFYUDqA8fHtEzWVoP/XRPCImajmH3gi+NpMBAmtas4Kqo3tQRowSK9F26OUWrQ9XGk0SkTm7R8tnxGOEW0vNk77VhotloIruh2KJbqieXqxYdomWsk0bzrehdVNZyKl2lqwoPpEANaXb+rocR7nL+Fx/pKOHmOb+8cb79/ZZ+joJMcTEdlGT7W1YMHEYZiX2FS6kyr90dtsTbPw7KvCIyKJqfC0oMQQ86oHg9XZUL6129OZNndnzfgNgK54RCQ9FZ4WLaweCcAjld91eSbT90j1TkZ9PXOzvZlf3qfb0xGRWUaFp0V7jh8HwKrBS7s8k+m7ccs3ADhw6Jlhux8RkU5Jm2pzZ3x05vRqi37p5qVvFo+fRGXeAtZXbuLB+vUsnHjSo7dlQUKrnpMMq3t7Ui3R3KOEzbbkXc3H+c3mxhLeTx56AxNBb6doe7UWpNeCVFs1WPmwWg+SgEEPt1qQLqsFb+qtW8HtwfhZmHYLfnTyEleFU2fB9qLjtOmPik6vHBqmwjr83maLltmtFWzi1sO6tTKprnhaVPIh9h/5awDunnd+l2ez624f/S5b6g+wZ/kI9qs8o9vTEZFZSIWngAM2nwrAfXMuYzxb393J7KIbRs4BYPmcN+ppNhHpChWeAubWDmDx6DOo2xgr532t29MpbPX4Ndw7cTUVm8cRQ+1ZbkFEpCgVnoIO3ng6AHfs9kU2Vm7r8mxaV/VRLt/wJgCOnvMmBrP5XZ6RiMxWKjwF7TF+LAdsfjluVX676APUab2dTTf9fPPHWVe7jd1Lh/K0ee/r9nREZBZLnmqrTmwfVfGCq++1S5QGilYm3bb/49f+E2sHr2bjwC38Yc45HLLxTbn712s5qbZghc1IFiSKJkr5kZ9STlLngfq1XDt2NkbG8+d9DmoDVJudpCZy+rQBTFSCHmtBeq0WfAuj7XUPxgm214O/kepBb7ei6bWwh1vQZ82jpFfO/tHjLBo77uFW8O/Ewr3aOrsCaafTcdI7dMWzC8o+hyPXfgSAuxZ9gQ0Dne3hNh3jvpGrxt+MU+fo4X9iaeW4bk9JRGY5FZ5dtPvosey/ofGU23VL3szmyh+7PaXtVH0rl42/kvV+e+Mptjkf6PaURERUeKbj0IfewZ5bns5E6RGuXXIGW8oruz2lR1V9Kz8Yfw3313/BHJby4vnfpmydW7pbRKRVKjzTkFHhqAf+J4tGj2asvJZrlr5uRiTdxn0j/zX+Mu6tX8kQu7Ni8NssKC3r9rRERAAVnmkr+TB/9sBn2WPr8YyX1vGrpa9n1bxLcLqz4NOD9Rv4ztjJzSudvXnR4HfZPTusK3MREcnTUsTKzBYCXwSOBBx4PXAbcD6wDFgJnOruj+xoHK871bGZswJp9M79esE0UKk+wPLVn+KmJR/kgd1+xE17fog1wz/kiQ9/kKHakpbmkgXHrJby+0ZNXfW0xhg3Zmfz+7HP4tRYwMH8RflbzK8vo1qvUa3mj1PLSd41tucXziiAGAxPrR6l4IKvfZBS8yDt5sHfTmEaLUi7ReOECbMwkZazPdq36EqjgeLpst5Ir7VrnCgZWqvnP8aj3nHRz0QndauXWqe1+gj8NHC5ux8GHAXcArwHuNLdDwGubH4+a2U+wJPWnMUT13yUcm03Hpr7M36+79+wOsHVz8P8jsvKf8lNpc/g1Dky+2/8dfnHzLdlHT2uiMiu2OkVj5ktAJ4FvBbA3ceBcTM7BXhOc7dzgZ8A7+7EJHuFYeyzaQW7jzyVW5Z8nIfm/oybFn+YPy44lwM2nso+m1dQZmFbjlWnxn12JX/IzuO+7CoAdvNlPLv8GfbOTmjLMUREOqGVp9oOAh4EvmJmRwHXA28Blrj7/c191gC5zymZ2RnAGQCDw6097dTrhmqLWX7f2Tyw8HJuW3Q2Wwbu4pY9z+IPu3+afUdeyAFbXsb8iUOxXXiJbas9wMrKt7mr/A222CoAMh/kCfXXsLz+buYNLGj36YiItFUrhacMHA38o7tfY2afZsrTau7uZpb7fJK7nwOcA7DbosN7+4nJAgxjn80r2HvzX7B2zlXcM/8CHhm+jnvmXcA98y6gXJ/H/PHDWTBxBAvGn8gediSV+gIyBjEy6oxRta08XLqbdaUbeSS7kUdKN7E1u//RY8zzA3lC/TUcXD+VQXbv4tmKiLSulcKzCljl7tc0P7+QRuF5wMyWuvv9ZrYUWNupSfayjAp7jzyfvUeez+bKHaxaeBFrhq9grPQg64auZd3QtYXGK/tc9qqewGH2Wpb6s3fpqklEpJt2WnjcfY2Z3Wtmh7r7bcBJwM3Nf6cBZzU/XrLTo7lTi+JPM0iUgolWGvUgHTP1izunehCHV9/N4byb0dKDbBy4mY0Dt7Bh8Ga2DNxF1Uao2xhOnZIPkjHEPN+fhdUjWVQ7kkW1JzGvvgwjY3BoAAecx8bMwjRasD3aP0r8hONHPdaiXm1Rqi1/97CHm1Nwe9H+aIX7qeVsn2Epr1CP9FKLUmcerGrrs2hF0V7RasfKfwS+bmYDwF3A62gk4i4ws9OBu4FTOzPF/jRUW8zQ1mez19ZnA1AZHMjdb2A4f7uISK9qqfC4+w3AMTk3ndTW2YiISN/TCwQiIpKUCo+IiCSlwiMiIkmlXYGU/NVG3bvz9p6wV1tYj4O+adHeOWmaqE9WPUje1Kv5Oa96kDqLVnMN9w++9h6uHJq/PfoWhmm3/N130JMtGidKrxVLaMW93Yql4wodNRojOmY0TsHegiLdpiseERFJSoVHRESSUuEREZGkVHhERCQpFR4REUkqaaoNvGsJtjzhXKJkWFCnLevcOYWpszCN1qbt4XFzNxfeHim+f7HUWdG0W2FFViDtcTNtpVHpHf35EyEiIjOWCo+IiCSlwiMiIkmp8IiISFIqPCIikpSlTJmZ2YM0Fo0D2BN4KNnBu2s2nSvMrvOdTecKs+t8Z9O5QvvP90B3X5x3Q9LC85gDm13n7nmLy/Wd2XSuMLvOdzadK8yu851N5wppz1dPtYmISFIqPCIiklQ3C885XTx2arPpXGF2ne9sOleYXec7m84VEp5v117jERGR2UlPtYmISFIqPCIiklTywmNmJ5vZbWZ2h5m9J/XxO83Mvmxma83spknbdjezK8zs9ubHRd2cY7uY2f5mdpWZ3WxmvzeztzS39+v5DpnZr8zst83z/Whz+0Fmdk3zMX2+mQ10e67tYmYlM/uNmX2v+Xk/n+tKM7vRzG4ws+ua2/r1sbzQzC40s1vN7BYzOyHluSYtPGZWAj4LvAA4AvhbMzsi5RwS+A/g5Cnb3gNc6e6HAFc2P+8HVeAd7n4EcDzwD83vZ7+e7xhworsfBSwHTjaz44FPAJ9y98cDjwCnd2+KbfcW4JZJn/fzuQI8192XT3o/S78+lj8NXO7uhwFH0fgepztXd0/2DzgB+MGkz98LvDflHBKd5zLgpkmf3wYsbf5/KXBbt+fYofO+BHjebDhfYA7wa+CpNN7tXW5uf8xjvJf/Afs1fwGdCHwPsH491+b5rAT2nLKt7x7LwALgjzTDZd0419RPte0L3Dvp81XNbf1uibvf3/z/GmBJNyfTCWa2DHgKcA19fL7Np55uANYCVwB3AuvdvdrcpZ8e02cD7wK2rYy4B/17rgAO/NDMrjezM5rb+vGxfBDwIPCV5tOoXzSzuSQ8V4ULEvPGnxN9lWE3s3nAt4G3uvvGybf12/m6e83dl9O4GjgOOKy7M+oMM1sBrHX367s9l4Se4e5H03gp4B/M7FmTb+yjx3IZOBr4nLs/BdjClKfVOn2uqQvPamD/SZ/v19zW7x4ws6UAzY9ruzyftjGzCo2i83V3v6i5uW/Pdxt3Xw9cRePppoVmtm0Z+X55TD8deJGZrQS+RePptk/Tn+cKgLuvbn5cC3yHxh8W/fhYXgWscvdrmp9fSKMQJTvX1IXnWuCQZjJmAHgFcGniOXTDpcBpzf+fRuO1kJ5nZgZ8CbjF3T856aZ+Pd/FZraw+f9hGq9n3UKjAL20uVtfnK+7v9fd93P3ZTR+Tn/s7n9HH54rgJnNNbPdtv0feD5wE334WHb3NcC9ZnZoc9NJwM0kPNfknQvM7C9pPHdcAr7s7mcmnUCHmdk3gefQaDH+APBh4GLgAuAAGstCnOru67o0xbYxs2cAVwM38qfXAd5H43WefjzfJwPn0njsZsAF7v4xM3scjauC3YHfAK9y97HuzbS9zOw5wD+7+4p+PdfmeX2n+WkZ+Ia7n2lme9Cfj+XlwBeBAeAu4HU0H9MkOFe1zBERkaQULhARkaRUeEREJCkVHhERSUqFR0REklLhERGRpFR4REQkKRUeERFJ6v8DbGHS+sHB+wEAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 504x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_ev.plot_average(avg=0.0937, tol=0.01, filename='conv_pred_test3')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "QbmY9PbxO3T5",
    "outputId": "60503738-d869-48c8-bfae-0ade4f09073c"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.023251016206711946"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_predictor = nn.Sequential(\n",
    "    nn.AvgPool2d(kernel_size=2, stride=2),\n",
    "    model\n",
    ")\n",
    "\n",
    "test_ev2 = utils.Evaluator(test_predictor, dataset=test_data)\n",
    "test_ev2.calculate_loss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "tjw_LYDZUlVN"
   },
   "outputs": [],
   "source": [
    "torch.save(model, './models/convnet32_3.model')"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
